Проверить файл на наличие символов - 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
 //ошибка

Объяснение кода листинга программы

  1. В условии проверки используется оператор или (||), что позволяет проверять соответствие символа любому из двух указанных условий.
  2. Первое условие: c>='0'&& c<='9'. Здесь проверяется, является ли символ c числом от 0 до 9.
  3. Второе условие: c=='-'. Здесь проверяется, является ли символ c дефисом.
  4. Если символ c является числом от 0 до 9 или дефисом, то выполняется блок кода после оператора if, иначе выполняется блок кода после оператора else.
  5. В данном коде после оператора if нет никакого блока кода, поэтому считается, что в этом случае ничего не происходит.
  6. После оператора else также нет никакого блока кода, поэтому считается, что в этом случае тоже ничего не происходит.
  7. Таким образом, в данном коде выполняется проверка символа c на соответствие числу от 0 до 9 или дефису. Если символ не соответствует ни одному из этих условий, то считается, что есть ошибка.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5
Похожие ответы