Программа не выдает сообщение об ошибке - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день. Есть программа, которая должна прочитать 10 чисел из файла input.dat, умножить каждое из них на 2 и записать результат в output.dat. От себя добавил только #include <conio.h> и getch :
#include <stdio.h>
#include <conio.h>
 const int N = 10;
 main()
{
   int i, A[N];
   FILE *fp; // указатель на файл
   fp = fopen( "C:\\Data\\input.dat", "r" ); // открыть файл на чтение
     if ( fp == NULL ) { // обработка ошибки
       printf("Нет файла данных");
       getch ();
       return 1; // выход по ошибке, код ошибки 1
}
 
   for ( i = 0; i < N; i ++ )
     if ( 0 == fscanf(fp,"%d",&A[i]) ) { // чтение и обработка
      printf("Не хватает данных в файле"); // ошибки
      getch ();
      break;
}
   fclose ( fp ); // закрыть файл
    for ( i = 0; i < N; i ++ )
    A[i] = A[i] * 2;
   fp = fopen( "C:\\Data\\output.dat", "w" ); // открыть файл на запись
    for ( i = 0; i < N; i ++ ) // вывести массив в файл
          fprintf ( fp, "%d\n", A[i] ); // в столбик
          fclose ( fp );
}
Если файла input.dat нет, программа как положено выдает сообщение "Нет файла данных". Если в файле есть числа (через пробел или построчно) - считает и создает файл/перезаписывает файл output.dat с правильными результатами (все числа умножены на 2). Но если файл input.dat пустой, то вместо вывода задуманного сообщения об ошибке - "Не хватает данных в файле", записывает в output.dat результат такого вида (цифры каждый раз разные): -1787724184 -4 -281464396 -281329164 9577392 9577024 4587120 -281330118 0 0 По задумке, программа должна выдавать сообщение об ошибке, если файл input.dat пуст, т.е. в нем нет данных (или их не хватает). Предположил, что возможно в этой строчке: if ( 0 == fscanf(fp,"%d",&A[i]) ) { // чтение и обработка ошибка и нужно исправить на: if ( fscanf(fp,"%d",&A[i]) == 0) { // чтение и обработка но результат не изменился. Думаю это не со средой и компилятором связано, а с самим примером (но на всякий случай - пробовал на Dev-С++ и Code::Blocks).

Решение задачи: «Программа не выдает сообщение об ошибке»

textual
Листинг программы
if(fLen < sizeof(int)*N + strlen(" ")*(N-2)*sizeof(char))

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

  1. Переменная fLen содержит размер файла в байтах.
  2. Переменная N содержит количество элементов в массиве.
  3. В выражении sizeof(int)*N вычисляется размер массива в байтах.
  4. В выражении strlen( )*(N-2)*sizeof(char) вычисляется дополнительный размер массива для хранения строк, содержащих (два символа) между каждым элементом массива, за исключением последнего элемента.
  5. Результат вычисления используется в условии проверки if.
  6. Если размер файла меньше, чем сумма размера массива и дополнительного размера для строк, то программа продолжает работу.
  7. Если условие не выполняется, то программа выдает сообщение об ошибке.

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


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

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

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