这个程序运行良好。
int main()
{
{
printf("Type something:\n");
char* message = malloc(64 * sizeof(char));
fgets(message, 64, stdin);
printf("message ist : %s\n", message);
free(message);
}
}
但是当我运行以下程序时,它不允许我写任何内容,而是打印出:"message ist: "
int main()
{
char action;
while(action!='e')
{
printf("print a line: p\n");
printf("End Program: e\n");
action = getc(stdin);
if(action == 'p')
{
fflush(stdin);
printf("Type something:\n");
char* message = malloc(64 * sizeof(char));
fgets(message, 64, stdin);
printf("message ist : %s\n", message);
free(message);
}
else if(action == 'e')
{
printf(" Program ended successfully\n");
exit(0);
}
}
}
有人能解释一下为什么第一个程序让我输入,而第二个程序却不行吗?
我试过清空键盘缓冲区,但没有用。
我尝试使用getline()
替代fgets()
,结果相同。
非常感谢任何想法和解释。
action
的值吗?顺便说一下,fflush(stdin)
是未定义行为。 - kluttfgets()
看到的唯一字符。 - pmgfflush(stdin);
确实是未定义行为。例如,Windows库通过定义fflush(stdin);
(可能还有其他内容)来扩展C。但我从不使用它,我认为没必要依赖扩展是不好的。 - pmg