У меня есть эта простая программа на C, которая читает символы из стандартного ввода и отображает таблицу с пронумерованными строками и столбцами, внутри которых находятся персонажи, которые мы написали. Код:C - Перенаправление ввода Windows с getchar не работает?
#include <stdio.h>
#define COLS 6
#define WIDTH 5
int main(int argc, char *argv[]){
char buffer[COLS]={0};
int c;
int cols;
for(cols=0;cols<COLS && (c=getchar())!=EOF;cols++){
buffer[cols]=c;
}
if(cols!=0){
int a;
printf("%-*s",WIDTH,"");
for(a=0;a<cols;a++){
(cols!=(a+1)) ? printf("%-*d",WIDTH,(a+1)) : printf("%-*d\n",WIDTH,(a+1));
}
printf("%-*d",WIDTH,1);
for(a=0;a<cols;a++){
(cols!=(a+1)) ? printf("%-*c",WIDTH,buffer[a]) : printf("%-*c\n",WIDTH,buffer[a]);
}
cols=0;
int rows=2;
while((c=getchar())!=EOF){
if(cols==0){
printf("%-*d%-*c",WIDTH,rows,WIDTH,c);
cols++;
}
else{
if(COLS!=(cols+1)){
printf("%-*c%",WIDTH,c);
cols++;
}
else{
printf("%-*c\n",WIDTH,c);
cols=0;
rows++;
}
}
}
printf("End-Of-File\n");
}
else{
printf("No valid characters input\n");
}
return 0;
}
я скомпилировать программу с куб.см на Windows XP, и если, в Windows, консоли (CMD), я исполню ее с:
program.exe
затем считывает символы I вход с клавиатурой. Он работает нормально. Проблема возникает, когда я решаю, что символы должны быть прочитаны из txt-файла. Поэтому я создаю txt-файл с блокнотом (в той же папке program.exe), и я пишу пару предложений внутри него. Затем в консоли я выполняю:
program.exe<file.txt
но вывод, что я получаю «нет допустимых символов ввода», как если бы сам первый символ читается программой был EOF.
Любые идеи?
Спасибо.
РЕШЕНИЕ: Я только что выяснил, в чем проблема. Это был Comodo Internet Security, который мешал программе читать символы из txt-файла. На самом деле Comodo был песочницей программы. Поэтому после установки программы в список «Безопасные файлы» все работало так, как должно. Надеюсь, это решение поможет любому, у кого есть аналогичная проблема.
Я думаю, вы хотите позвонить 'program.exe 0
amdixon
Тот же вывод, что и раньше. – condorwasabi
Самое первое, что я исправит, это тип 'c', что неверно. 'getchar()' возвращает 'int'; а не 'char', и это важно, если вы выслеживаете, что такое EOF. 'c' также должен быть' int'. Я также исправлю ваш параметр 'argv' в' main', что неверно; это должно быть 'char * argv []', а не 'char argv []'. – WhozCraig