C gets()未按预期工作
因此,首先,我想将我的代码粘贴到这里,以备将来参考:C gets()未按预期工作,c,scanf,gets,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); 我认为代码是不言自明的,易于理解。然而,我这边有一个简短的解释。这段代码只是获取一个整数输入并将其存储到
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
输入您的日期(1-30/31):
输入您的备注:
//打印我上面写的便条
正在发生的事情:
但是,现在发生的事情是这样的(不正常):
输入您的日期(1-30/31):
//这是一个输入
输入注释://这是一个输出
如您所见,它会在打印前记下我的笔记。输入您的笔记:
有人能告诉我为什么会这样吗?我不太确定我做错了什么。您需要刷新输出流。。这意味着在printf中包含一个
\n
,或者通过手动调用fflush(stdout)
啊,所以在另一次搜索后,我发现:
使用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);
而且,它成功了。停止使用
get()
。永远不要用它。它已经被弃用多年了。使用fgets()
或其他方法。并打开编译器警告。此外,我们还将get\s
作为更安全的版本。:)无论如何,您需要刷新输出,可以通过打印新行隐式刷新,也可以通过调用fflush
显式刷新。或者可能发生其他问题。
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);