Не работает признак конца ввода данных с клавиатуры - 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);
}
Объяснение кода листинга программы
- Объявлены переменные:
cnt- счётчик символовf- файловый указатель
- Проверка аргументов командной строки:
- Если аргументов нет, то программа считывает символы из стандартного ввода до конца строки
- Если передан один аргумент, то программа открывает файл для чтения в бинарном формате
- Обработка ошибок:
- Если не удалось открыть файл, то выводится сообщение об ошибке и программа завершается с кодом выхода EXIT_FAILURE
- Если не удалось выполнить смещение в файле, то выводится сообщение об ошибке и программа завершается с кодом выхода EXIT_FAILURE
- Выполняется смещение в файле на позицию 0, что соответствует концу файла
- Переменной
cntприсваивается значение, полученное с помощью функцииftell(), которая возвращает текущую позицию в файле - Файл закрывается с помощью функции
fclose() - Выводится сообщение о количестве считанных символов
- Программа завершается с кодом выхода EXIT_SUCCESS