Не работает признак конца ввода данных с клавиатуры - C (СИ)

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

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

только начал изучать с++, и сразу же появилась проблемка) создал консольное приложение, написал программу подсчета символов в файле. Только вот в цикле while, не работает признак конца ввода символов (eof - код Esc по ASCII). В результате программа не выдает значение переменной nc. З.Ы. <Ctrl>+<z> тож не помогает. Не могу понять в чем проблема, подскажите плз)) Заранее спасибо!
Листинг программы
  1. //---------------------------------------------------------------------------
  2. #pragma hdrstop
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #define eof 27
  6.  
  7. //---------------------------------------------------------------------------
  8. #pragma argsused
  9. int main()
  10. {
  11. long nc;
  12. printf("make input>\n");
  13. nc=0;
  14. //c=getchar();
  15. while(getchar() != eof)
  16. nc++;
  17. printf("ch num is %d\n", nc);
  18. getch;
  19. }
  20. //---------------------------------------------------------------------------

Решение задачи: «Не работает признак конца ввода данных с клавиатуры»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char **argv){
  5.     FILE * f;
  6.     long cnt;
  7.    
  8.     if ( argc == 1 )
  9.         for ( cnt = 0; getchar() != '\n'; ++cnt )
  10.             ;
  11.     else {
  12.         if ( ( f = fopen(argv[1], "rb") ) == NULL ){
  13.             perror("fopen");
  14.             exit(EXIT_FAILURE);
  15.         }
  16.         if ( fseek(f, 0, SEEK_END) ){
  17.             perror("fseek");
  18.             exit(EXIT_FAILURE);
  19.         }
  20.         cnt = ftell(f);
  21.         if ( fclose(f) )
  22.             perror("fclose");
  23.     }
  24.     printf("%ld characters.\n", cnt);
  25.    
  26.     exit(EXIT_SUCCESS);
  27. }

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

  1. Объявлены переменные:
    • cnt - счётчик символов
    • f - файловый указатель
  2. Проверка аргументов командной строки:
    • Если аргументов нет, то программа считывает символы из стандартного ввода до конца строки
    • Если передан один аргумент, то программа открывает файл для чтения в бинарном формате
  3. Обработка ошибок:
    • Если не удалось открыть файл, то выводится сообщение об ошибке и программа завершается с кодом выхода EXIT_FAILURE
    • Если не удалось выполнить смещение в файле, то выводится сообщение об ошибке и программа завершается с кодом выхода EXIT_FAILURE
  4. Выполняется смещение в файле на позицию 0, что соответствует концу файла
  5. Переменной cnt присваивается значение, полученное с помощью функции ftell(), которая возвращает текущую позицию в файле
  6. Файл закрывается с помощью функции fclose()
  7. Выводится сообщение о количестве считанных символов
  8. Программа завершается с кодом выхода EXIT_SUCCESS

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


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

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

13   голосов , оценка 4.154 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы