Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/22: Рейтинг темы: голосов - 22, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 06.07.2012
Сообщений: 9

Вывести из файла на экран только содержащие двузначные числа строки

13.07.2012, 21:52. Показов 4423. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дорогие форумчане, не откажите в помощи!!
Вот есть задание "написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа"

Сам попытался сделать, вот что написал
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
int main() {
    FILE * file = fopen( "input.txt", "rt" );
    if ( file == 0 ) {
        printf( "Can't find and open input file\n" );
        return 1;
    }
    while ( ! feof( file ) ) {
        char line[ 256 ];
        if ( fgets( line, 255, file ) != 0 ) {
            int n;
            if ( sscanf( line, "%i", &n ) == 1 ) {
                if ( n >= 10 && n <= 99 ) {
                    printf( "%s", line );
                }
            }
        }
    }
    fclose( file );
}
Не судите строго, не так давно учусь программированию! Пока не все получается!
Помогите пожалуйста исправить ошибки в коде, чтобы выводило правильно) А то у меня запускается процесс компиляции, а строки не выводит

Заранее спасибо!!

 Комментарий модератора 
Не дублируйте темы - это нарушает правила форума!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.07.2012, 21:52
Ответы с готовыми решениями:

Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа.
Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа.

Вывести на экран слова из строки, содержащие двузначные числа
Помогите, пожалуйста, написать программу, которая считывает текст с клавиатуры и выводит на экран слова, содержащие двузначные числа.

Считать текст из файла и вывести на экран только строки, содержащие двузначное числа
Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначное числа. Ввод-вывод...

10
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
13.07.2012, 22:15
Цитата Сообщение от Vonder Посмотреть сообщение
Помогите, пожалуйста найти ошибку в коде, не пойму что не так сделано.
Большое спасибо тому, кто поможет!!
- ошибка в логике алгоритма, а точнее в предположении что в строке сразу же 1-м идёт двухзначное
Цитата Сообщение от Vonder Посмотреть сообщение
sscanf( line, "%i", &n )
, сейчас поможем...
0
18 / 18 / 12
Регистрация: 25.06.2011
Сообщений: 99
13.07.2012, 22:28
В текстовом файле содержатся только символы в кодах. Чтобы из символов "99", например, получить число 99, надо преобразовать код символа "9" в цифру 9 и т.д., из полученных цифр слепить число и уже полученное число проверять на двузначность.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
13.07.2012, 22:32
Vonder, вот рабочий алгоритм на сонове твоего кода
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <ctype.h> //isdigit
#include <stdio.h> //i/o
 
//Ôóíêöèÿ ïðîâåðÿåò ñîæåðæèò ëè ñòðîêà õîòÿ áû 1-íî äâóõçíà÷íîå ÷èñëî
int isStrHas2digNumbers(char * str);
 
int main()
{
    //Õîðîøî áóäåì ïîëàãàòü, ÷òî ñòðîêè â ôàéëå êîðî÷å 256 ñèìâîëîâ
    char line[256] = {0};//÷òî â îáùåì ñëó÷àå ñîâñåì íå òàê
    int nLines  = 0;//Áóäåò ñîæåðæàòü ñóììàðíîå ÷èñëî ñòðîê ñ äâóõçíà÷íûìè
    FILE * file = fopen( "input.txt", "rt" );
    if ( file == 0)
        printf( "Can't find and open input file\n" );
    else
    {
        while ( ! feof( file ) ) 
        {
            if ( fgets( line, 255, file ) )
            if ( isStrHas2digNumbers(line))
            {
                nLines = nLines + 1;//óâåëè÷èâàåì çíà÷åíèå ñ÷¸ò÷èêà
                printf("%s\n", line);//ïå÷àòàåì ñòðîêó
            }
        } 
        fclose(file);
    }
    printf("input.txt contains from %d lines with 2digit values\n", nLines);
    getchar();
    return 0;
}
 
int isStrHas2digNumbers(char * str)
{
    int i;
    int nCount    = 0;
    int isContain = 0;//Ôëàã óêàçûâàþùèé ÷òî â ñòðîêå åñòü äâóõçíà÷íûå
    if(str != NULL)
    {
        for(i = 0; str[i] != '\0' && !isContain; i = i + 1)
        {
            if(isdigit(str[i]))//Âñòðåòèëè öèôðó
            {
                //Öèêë äëÿ ïîäñ÷¸òà ÷èñëà ïîäðÿä èäóùèõ öèôð
                for(nCount = 0;str[i] != '\0'; i = i + 1)
                {
                    if(isdigit(str[i]))
                        nCount = nCount + 1;
                    else
                        break;
                }
                if(nCount == 2)
                    isContain = 1;
            }
        }
    }
    return isContain;
}
Содержимое input.txt
gdfh25dfhfg6656
jhg
jkghk415hjg
k2jhk15j1kfh1jgh
ghkjhk1km5jhk
fjk223h1k5jh4fgj
hg
kgh2k1jh
hgk2jl15
hg2k4ghk15gk
2h1541555
g555ghj555gjh1gh5ghj55
Миниатюры
Вывести из файла на экран только содержащие двузначные числа строки  
1
1 / 1 / 0
Регистрация: 06.07.2012
Сообщений: 9
13.07.2012, 22:32  [ТС]
okamy, это по таблице аски коды цифр смотреть?
1
18 / 18 / 12
Регистрация: 25.06.2011
Сообщений: 99
13.07.2012, 22:34
Да. Для кодов цифр все очень легко. Коды в текстовом файле можно проверять только на вхождение в диапазон кодов цифр.
0
13.07.2012, 22:36

Не по теме:

От себя: Я постарался реализовать программу с возможно меньшим число вхождений стандартніх функций и простой логикой пробора строки на предмет наличия двузначных. Всё можно написать и более продвинуто а также можно использовать возможности С++ и std::string, но как я понял вариант С++ вообще не рассматривается

0
1 / 1 / 0
Регистрация: 06.07.2012
Сообщений: 9
13.07.2012, 22:39  [ТС]
-=ЮрА=-, Спасибо вам большое! Все отлично работает))
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
13.07.2012, 23:18
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
 
int have_2digits_number(const char * s) {
    while ( s = strpbrk(s, "0123456789") ) {
        int i;
        if ( ( i = atoi(s) ) > 9 && i < 100 )
            return 1;
        while ( isdigit(*++s) )
            ;
    }
    
    return 0;
}
 
#define FILE_NAME "file.txt"
 
int main(void) {
    char buf[BUFSIZ];
    FILE * f;
    
    if ( ! ( f = fopen(FILE_NAME, "r") ) ) {
        perror("fopen");
        exit(1);
    }
    
    while ( fgets(buf, BUFSIZ, f) )
        if ( have_2digits_number(buf) )
            printf("%s", buf);
    
    if ( ferror(f) || fclose(f) ) {
        fprintf(stderr, "Somethink is wrong with input file!\n");
        exit(1);
    }
    
    exit(0);
}
2
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
13.07.2012, 23:47
easybudda, прикольная идея с выделением цифирей с помощью strpbrk (об этой функции слышал но не разу не использовал, возьму себе на вооружение)!У меня была идея сгенить 128 - 48 + 9 массив чаров для strtok потом поразбивать строку на цифровые лексемы и из неё sscanf-ом подхватывать цифири, после уже смотреть в интервале ли они 9 < val && val < 100 или нет, но отбросил её т.к. код громоздким выходил, а тут всё strpbrk решает оказывается
У меня только одно предложение к усовершенствованию
Цитата Сообщение от easybudda Посмотреть сообщение
atoi(s)
думаю можно заменить на if( sscanf(s,"%d",&i) ) тем самым избавляем себя от stdlib хотя тут на усмотрение что больше нравиться atoi или sscanf
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
13.07.2012, 23:59
Вобщем вот мои мысли о strtok (как и говорил из за подготовки ASCII талицы немного раздут вышел)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <ctype.h> //isdigit
#include <stdio.h> //i/o
#include <string.h>
 
//Ôóíêöèÿ ïðîâåðÿåò ñîæåðæèò ëè ñòðîêà õîòÿ áû 1-íî äâóõçíà÷íîå ÷èñëî
int isStrHas2digNumbers(char * str);
 
int main()
{
    //Õîðîøî áóäåì ïîëàãàòü, ÷òî ñòðîêè â ôàéëå êîðî÷å 256 ñèìâîëîâ
    char line[256] = {0};//÷òî â îáùåì ñëó÷àå ñîâñåì íå òàê
    int nLines  = 0;//Áóäåò ñîæåðæàòü ñóììàðíîå ÷èñëî ñòðîê ñ äâóõçíà÷íûìè
    FILE * file = fopen( "input.txt", "rt" );
    if ( file == 0)
        printf( "Can't find and open input file\n" );
    else
    {
        while ( ! feof( file ) ) 
        {
            if ( fgets( line, 255, file ) )
            if ( isStrHas2digNumbers(line))
            {
                nLines = nLines + 1;//óâåëè÷èâàåì çíà÷åíèå ñ÷¸ò÷èêà
                printf("%s\n", line);//ïå÷àòàåì ñòðîêó
            }
        } 
        fclose(file);
    }
    printf("input.txt contains from %d lines with 2digit values\n", nLines);
    getchar();
    return 0;
}
 
int isStrHas2digNumbers(char * str)
{
    int i;
    int val;
    char delim[128 - (48 + 9)] = {0};//Íàøà ñòðîêà ñ ïå÷àòàåìûìè ñèìâîëàìè ASCII
    for(i = 0; i < 128 - (48 + 9); i++)
        delim[i] = i + (48 + 9);
    char * tok    = NULL;
    char buf[256] = {0};//Áóôôåð äëÿ ñòðîêè
    int isContain = 0;//Ôëàã óêàçûâàþùèé ÷òî â ñòðîêå åñòü äâóõçíà÷íûå
    if(str != NULL)
    {
        strcpy(buf, str);
        for(tok = strtok(buf,delim); tok != NULL && !isContain; tok = strtok(NULL,delim))
        {
            if(sscanf(tok,"%d", &val))//Âñòðåòèëè öèôðó
            if(9 < val && val < 100)
                isContain = 1;
        }
    }
    return isContain;
}
Миниатюры
Вывести из файла на экран только содержащие двузначные числа строки  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.07.2012, 23:59
Помогаю со студенческими работами здесь

Вывести из файла на экран только те строки, в которых есть числа
Требуется написать программу, которая выводит из файла на экран только те строки, в которых есть числа. Написал что-то, но оно работает...

Считать текст из файла и вывести строки, которые содержат двузначные числа
Помогите кто-нибудь с программой. Вроде все работает, только кроме двузначных выводит и трехзначные и тд... Как это исправить??? ...

Вывести на экран все строки из файла f1.txt, содержащие данную строку
3. Дан текстовый файл f1.txt и строка символов S1. Вывести на экран все строки из файла f1.txt, содержащие данную строку. Результаты

Вывести на экран из файла только строки, содержащие двузначные числа
Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа. Можете подсказать, в...

Считать текст из файла и вывести на экран только строки, содержащие двузначные числа
Написать прогу,которая считывает текст из файла и выводит на экран только строки,содержащие двузначные числа.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru