在输入期间首先调用fgets()调用?

时间:2013-09-16 01:09:30

标签: c stdin fgets

我正在编写一个程序,可以在手动模式下从用户那里获取计算机细节。但是,我遇到了一些问题。

在此代码中:

    char choice = getc(stdin);

    if (choice == 'y' || choice == 'Y')
    {
        config_file = fopen(config_file_loc, "w");

        printf("%s", "Please enter the name of your distribution/OS: ");
        fgets(distro_str, MAX_STRLEN, stdin);
        fputs(distro_str, config_file);
        fputs("\n", config_file);

        printf("%s", "Please enter your architecture: ");
        fgets(arch_str, MAX_STRLEN, stdin);
        fputs(arch_str, config_file);
        fputs("\n", config_file);

        fclose(config_file);
    }

在运行时,输入从“请输入您的发行版/操作系统的名称:”跳到“请输入您的架构:”,将distro_str留空。

我试过冲洗stdin和stdout,但那些没有用。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

当您调用getc(stdin)来获取“choice”字符时,它会从输入缓冲区中读取一个字符。如果用户输入“y”后跟换行符,则换行符将保留在输入缓冲区中,随后的fgets()调用将读取该行 - 空行 - 并立即返回。

如果您希望所有输入都是面向行的,那么您应该每次都调用fgets(),包括在读取“choice”值时。

答案 1 :(得分:0)

getc将返回该字符,但新行字符仍然在stdin缓冲区中,因此您对fgets的第一次调用会获得一行只包含新行字符。< / p>