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

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

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

только начал изучать с++, и сразу же появилась проблемка) создал консольное приложение, написал программу подсчета символов в файле. Только вот в цикле while, не работает признак конца ввода символов (eof - код Esc по ASCII). В результате программа не выдает значение переменной nc. З.Ы. <Ctrl>+<z> тож не помогает. Не могу понять в чем проблема, подскажите плз)) Заранее спасибо!
//---------------------------------------------------------------------------
 
#pragma hdrstop
#include <stdio.h>
#include <conio.h>
#define eof 27

//---------------------------------------------------------------------------
 
#pragma argsused
int main()
{
  long nc;
  printf("make input>\n");
  nc=0;
  //c=getchar();
  while(getchar() != eof)
     nc++;
  printf("ch num is %d\n", nc);
  getch;
}
//---------------------------------------------------------------------------

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char **argv){
    FILE * f;
    long cnt;
    
    if ( argc == 1 )
        for ( cnt = 0; getchar() != '\n'; ++cnt )
            ;
    else {
        if ( ( f = fopen(argv[1], "rb") ) == NULL ){
            perror("fopen");
            exit(EXIT_FAILURE);
        }
        if ( fseek(f, 0, SEEK_END) ){
            perror("fseek");
            exit(EXIT_FAILURE);
        }
        cnt = ftell(f);
        if ( fclose(f) )
            perror("fclose");
    }
    printf("%ld characters.\n", cnt);
    
    exit(EXIT_SUCCESS);
}

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

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

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


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

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

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