我正在编写一个程序,可以在手动模式下从用户那里获取计算机细节。但是,我遇到了一些问题。
在此代码中:
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,但那些没有用。
感谢您的帮助。
答案 0 :(得分:1)
当您调用getc(stdin)
来获取“choice”字符时,它会从输入缓冲区中读取一个字符。如果用户输入“y”后跟换行符,则换行符将保留在输入缓冲区中,随后的fgets()
调用将读取该行 - 空行 - 并立即返回。
如果您希望所有输入都是面向行的,那么您应该每次都调用fgets()
,包括在读取“choice”值时。
答案 1 :(得分:0)
getc
将返回该字符,但新行字符仍然在stdin
缓冲区中,因此您对fgets
的第一次调用会获得一行只包含新行字符。< / p>