Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C gets()未按预期工作_C_Scanf_Gets - Fatal编程技术网

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);