Считать текст из файла и вывести строки, которые содержат двузначные числа - C (СИ)
Формулировка задачи:
Помогите кто-нибудь с программой. Вроде все работает, только кроме двузначных выводит и трехзначные и тд... Как это исправить???
#include "stdafx.h"
#include <string.h>
#include <stdio.h>
#include <ctype.h>
void Two(char* str)
{
FILE* f;
char word [256];
f = fopen(str, "r");
if(f == NULL) printf("File not found");
while(!feof(f))
{
fscanf(f, "%s", word);
if(strlen(word) >= 2)
{
for(unsigned int i = 0; i < strlen(word); i++)
{
if(isdigit(word[i]) && isdigit(word[i+1]))
printf("%s\n", word);
}
}
}
}
int main()
{
Two("text.txt");
return 0;
}Решение задачи: «Считать текст из файла и вывести строки, которые содержат двузначные числа»
textual
Листинг программы
#include <string.h>
#include <stdio.h>
#include <ctype.h>
void Two(char* str)
{
FILE* f;
char word [256];
size_t i, len;
f = fopen(str, "r");
if(f == NULL) printf("File not found");
while(!feof(f) && fscanf(f, "%s", word))
{
len = strlen(word);
for(i = 0; len > 1 && i < len - 2; i++)
if (isdigit(word[i]) && isdigit(word[i+1]) && !isdigit(word[i+2]))
printf("%s\n", word);
if (len >= 2 && isdigit(word[len-2]) && isdigit(word[len-1]) &&
(len == 2 ? 1 : !isdigit(word[len-3])))
printf("%s\n", word);
}
fclose(f);
}
int main(void)
{
Two("input.txt");
return 0;
}
Объяснение кода листинга программы
В этом коде используется функция Two, которая принимает в качестве аргумента строку, содержащую путь к файлу.
- Сначала открывается файл для чтения с помощью функции
fopen. - Если файл не может быть открыт, выводится сообщение об ошибке.
- Затем используется цикл
while, который продолжается до тех пор, пока не достигнут конец файла и не прочитана строка. - Внутри цикла используется еще один цикл
for, который ищет двузначные числа в строке. - Если два символа являются цифрами, а следующий за ними символ не является цифрой, то это двузначное число, и строка выводится на экран.
- Если в строке есть две цифры в конце, а третий символ не является цифрой, то это также двузначное число, и строка выводится на экран.
- В конце функция
fcloseзакрывает файл. - В функции
mainвызывается функцияTwoс аргументомinput.txt. - Возвращается 0, чтобы указать, что программа успешно завершилась.