1

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

在这段代码中:

    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 留空。

我试过刷新标准输入和标准输出,但没有奏效。

谢谢你的帮助。

4

2 回答 2

1

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

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

于 2013-09-16T01:13:52.933 回答
0

getc将返回字符,但换行符仍在stdin缓冲区中,因此您的第一次调用fgets获取仅包含换行符的行。

于 2013-09-16T01:13:06.307 回答