Консультация № 180848
18.11.2010, 21:03
53.35 руб.
0 4 1
Здравствуйте, уважаемые эксперты! Помогите пожалуйста решить задачу. Написать нужно на языке Си.
Задача:
Написать программу ,которая считывает текст из файла и выводит на экран только строки,не содержащие двузначных значений.
Пожалуйста прокомментируйте каждую строку.
Нужно сделать в DEV-C++

Обсуждение

давно
Мастер-Эксперт
325460
1469
19.11.2010, 17:04
общий
а двузначные значения чего, можно узнать?
Об авторе:
to live is to die
Неизвестный
20.11.2010, 00:17
общий
Если речь идет о числах то аналогичные задания можно найти:
https://rfpro.ru/question/174965
https://rfpro.ru/question/88193
давно
Мастер-Эксперт
325460
1469
22.11.2010, 13:55
общий
ответ есть, осталось только прокомментировать...
Об авторе:
to live is to die
Неизвестный
23.11.2010, 00:06
общий
это ответ
Здравствуйте, Olgaa!
Смотрите решение в приложении. В Вашей среде проверила, всё нормально компилируется. Считываем файл построчно, каждую строку анализируем на предмет наличия двузначных чисел (две цифры должны идти подряд, наличие или отсутствие разделителей не учитывается).
Файл inf.txt должен лежать рядом с exe-шником.
Например, для такого файла:
Код:
aseq13wdw31313
qsqde2323
wsdawefefe23
ewewewe232ed

результат работы программы будет таким:
Код:
qsqde2323
ewewewe232ed

Если что-то не понятно, или Вы имели в виду какое-то другое условие, напишите в мини-форуме, я поправлю.
Удачи!

Приложение:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
FILE* fl = fopen ("inf.txt", "rt"); //открываем файл
if (fl==NULL) { //если файл не открылся
printf ("Error"); //сообщаем об ошибке
system("PAUSE"); //чтобы не закрывалось окно
return 0; //выход
}
char buf[256]; //буфер (строки не длинее 255 символов должны быть)
int i, l, sl;
int b;
while (fgets (buf, 255, fl)) { //считываем строки, пока не вернётся NULL
b = 1; //флаг правильности строки
sl = strlen(buf); //сохраняем длину
for (i=0; i<sl; i++) { //идём по строке
l = 0; //длина числовой последовательности в строке
while (i<sl && buf[i]>='0' && buf[i]<='9') { //пока строка не кончится и символ цифровой
i++; //переходим на следующий символ
l++; //считаем цифру
}
if (l==2) b = 0; //если было две цифры подряд, сбрасываем флаг
}
if (b) printf (buf); //если флаг не сброшен, выводим строку
}
fclose (fl); //закрываем файл
system("PAUSE"); //для просмотра результата
return 0;
}
Форма ответа