gets()没有按预期工作

时间:2014-09-14 14:25:00

标签: c scanf gets

首先,我想将我的代码粘贴到此处以供将来参考:

int dayNum = 0;
printf("\n\nEnter your date(1 - 30/31): ");
scanf("%d\n", &dayNum);
printf("\n\nEnter your note:");
char note[10000];
gets(note);
printf("%s", note);

代码是我认为不言自明且易于理解的。但是,这是我方面的一个简短的解释。此代码只获取整数输入并将其存储到变量中,然后准备将字符串作为输入并将其打印到控制台。

我的期望:

我希望代码运行如下:

Enter your date(1 - 30/31): <my_input>

Enter your note: <my_long_note>

<my_long_note> //prints my note that I wrote above

发生了什么:

但是,现在发生的事情就是这样(异常):

Enter your date(1 - 30/31): <my_input>
<my_long_note> //this is an input

Enter your note: <my_long_note> //this is an output

正如您所看到的,在打印Enter your note:之前需要注意。

有人能告诉我为什么会这样吗?我不太确定我在那里做错了什么。

2 个答案:

答案 0 :(得分:2)

您需要刷新输出流..这意味着在printf中包含\n,或者手动调用fflush(stdout)

答案 1 :(得分:0)

啊,经过另一次搜索,我发现了这个:

使用scanf("%d%*c", &a)%*c术语导致scanf读取一个字符(换行符),但星号会导致该值被丢弃。

所以我的最终代码变成了这个:

int dayNum = 0;
printf("\n\nEnter your date(1 - 30/31): ");
scanf("%d%*c", &dayNum);
printf("\n\nEnter your note:");
char note[10000];
gets(note);
printf("%s", note);

并且,它有效。