繁体   English   中英

C:即使输入文件作为参数,程序也会要求用户输入

[英]C: Program asking for user input even when input file is given as an argument

我的程序需要接受文件输入,如果未输入文件,则需要将用户输入视为输入。

当我将输入文件输入程序时,如下所示:

./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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM