我的程序需要接受文件输入,如果未输入文件,则需要将用户输入视为输入。
当我将输入文件输入程序时,如下所示:
./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
答案 0 :(得分:3)
getchar()
从stdin
读取,但是您必须从fp
进行所有输入。将getchar()
更改为getc(fp)
。
getchar()
基本上只是getc(stdin)
的缩写。
执行此操作的另一种方法是将stdin
连接到文件,而不使用其他变量。
if (argc > 1) {
freopen(argv[1], "r", stdin);
}