Проверить файл на наличие символов - C (СИ)
Формулировка задачи:
Не могу исправить ошибку с выводом соответствующих сообщений в консоль... Как проверяла программу пошагово, то у меня вся проблема в том, что я в цикле , где хочу проверить файл на наличие символов/ букв, то есть не чисел, прохожу успешно, вследствие чего, зацикливаюсь на букве в последующем цикле... не знаю, как уже написать этот цикл, чтобы устранить данную ошибку.Кстати , я хотела бы еще узнать, как же нужно работать со стандартным потоком stdin...Подскажите , пожалуйста)Вот код программы:
#include <stdio.h> #include <math.h> #define NO_FILE -1 #define NO_NOMBERS 1 #define OK 0 int process(FILE* file, int* kol_pol) { int a; //число в файле int num1, num2; int otr1, otr2; int fl = 0; char c; // если файла не существует - возвращает значение -1 if (file == NULL) return NO_FILE; else { rewind(file); // Если в файле не число - то возвращает значение 1 while (fscanf(file, "%c", &c) != EOF) { ungetc(c, file); if (fscanf(file, "%c", &c) != 1) fl = 1; } // если в файле все числа, то найдем количество смены знака // считываем число с файла и определяем , положительное ли оно if (fl == 1) return NO_NOMBERS; else { rewind(file); fscanf(file, "%d", &a); num1 = a; (num1 >= 0) ? (otr1 = 1) : (otr1 = -1); while (fscanf(file, "%d", &a) != EOF) { // printf("Ok3"); num2 = a; (num2 >= 0) ? (otr2 = 1) : (otr2 = -1); if (otr1*otr2 == -1) (*kol_pol)++; num1 = num2; otr1 = otr2; } return OK; } } } int main(void) { int kol_pol = 0; FILE *fin; // ввод из файла fin = fopen ( "C:/c/test.txt", "r" ); //ввод с консоли //fin = stdin; if (fin == NULL) printf("Error"); process(fin, &kol_pol); if (process(fin, &kol_pol) == OK) printf("%s %d %s", "count = ", kol_pol, "\n"); if (process(fin, &kol_pol) == NO_FILE) printf("This file hasn't", "\n"); if (process(fin, &kol_pol) == NO_NOMBERS) printf("In the file there're symbols ", "\n"); getchar(); return OK; }
Решение задачи: «Проверить файл на наличие символов»
textual
Листинг программы
if(c>='0'&& c<='9' || c=='-') //все в порядке else //ошибка
Объяснение кода листинга программы
- В условии проверки используется оператор
или
(||), что позволяет проверять соответствие символа любому из двух указанных условий. - Первое условие:
c>='0'&& c<='9'
. Здесь проверяется, является ли символc
числом от 0 до 9. - Второе условие:
c=='-'
. Здесь проверяется, является ли символc
дефисом. - Если символ
c
является числом от 0 до 9 или дефисом, то выполняется блок кода после оператораif
, иначе выполняется блок кода после оператораelse
. - В данном коде после оператора
if
нет никакого блока кода, поэтому считается, что в этом случае ничего не происходит. - После оператора
else
также нет никакого блока кода, поэтому считается, что в этом случае тоже ничего не происходит. - Таким образом, в данном коде выполняется проверка символа
c
на соответствие числу от 0 до 9 или дефису. Если символ не соответствует ни одному из этих условий, то считается, что есть ошибка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д