2013-11-17 6 views
2

У меня есть эта простая программа на 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 был песочницей программы. Поэтому после установки программы в список «Безопасные файлы» все работало так, как должно. Надеюсь, это решение поможет любому, у кого есть аналогичная проблема.

+0

Я думаю, вы хотите позвонить 'program.exe 0 amdixon

+0

Тот же вывод, что и раньше. – condorwasabi

+1

Самое первое, что я исправит, это тип 'c', что неверно. 'getchar()' возвращает 'int'; а не 'char', и это важно, если вы выслеживаете, что такое EOF. 'c' также должен быть' int'. Я также исправлю ваш параметр 'argv' в' main', что неверно; это должно быть 'char * argv []', а не 'char argv []'. – WhozCraig

ответ

5

РЕШЕНИЕ: Я только что выяснил, в чем проблема. Это был Comodo Internet Security, который мешал программе читать символы из txt-файла. На самом деле Comodo был песочницей программы. Поэтому после установки программы в список «Безопасные файлы» все работало так, как должно.

+0

+1 для решения вашей собственной проблемы;) – amdixon

Смежные вопросы