我的程序需要接收文件输入,如果没有给出,则需要将用户输入视为输入。
当我将输入文件提供给程序时,如下所示:
./sim < ex1_in
一切都按预期工作!
但是,当我将输入文件指定为文件参数时,如下所示:
./sim ex1_in
该程序代替用户输入。
这是处理输入和文件参数的代码的一部分:
int main(int argc, char * argv []) {
if (argc > 3) {
fprintf (stderr, "Error: Too many arguments.\n");
return 1;
}
FILE *fp = argc > 1 ? fopen (argv[1], "r") : stdin;
if (!fp) { /* check file */
fprintf (stderr, "Error: File Open Failed '%s'.\n", argv[1]);
return 2;
}
//Initializing array of 256 unsigned chars
unsigned char binary[256];
int i = 0;
unsigned char c;
int count2 = 0;
//populate the 256 byte char array from stdin
while (count2 < SIZE) {
c=getchar();
binary[i] = c;
i++;
count2++;
}
到目前为止,我已经将这个while
循环识别为一个问题区域,因为当我评论它时,不会发生不需要的行为。但我不确定为什么会这样。
稍后在main
方法中,文件已关闭:
if (fp != stdin) fclose (fp); /* close file if not stdin */
另一个相关的事情:
#define SIZE 256
getchar()
从stdin
读取,但你必须从fp
做你所有的输入。将getchar()
改为getc(fp)
。
getchar()
基本上只是getc(stdin)
的缩写。
另一种方法是将stdin
连接到文件,而不是使用另一个变量。
if (argc > 1) {
freopen(argv[1], "r", stdin);
}