#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{
char aa[35];
int a;
scanf("%d",&a);
gets(aa);
puts(aa);
}
它不能从用户获取字符串,但如果我在整数值之前获取字符串,则可以正常工作。
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{
char aa[35];
int a;
scanf("%d",&a);
gets(aa);
puts(aa);
}
它不能从用户获取字符串,但如果我在整数值之前获取字符串,则可以正常工作。
有关缓冲 IO 的更多信息,您应该在此情况下搜索 Google,因为当您首先输入一个数字时,您还必须按“Enter”,这意味着在接受数字后会留下一个“\n”字符
因此,在输入任何字符串之前,请记住清除缓冲 IO,有两种方法可以做到这一点
Flush(stdin);
或
_flushall();
gets(aa);
gets(aa);
一旦scanf("%d",&a);
从stdin
中获取数字字符以形成a
的int
,它就完成了。它不会消耗可能跟随其后的'\n'
。
gets(aa);
会消耗数据直到'\n'
。
因此,像下面这样输入1 2 3 x y Enter,将把123
放入a
,并将"xy"
放入aa
。
scanf("%d",&a);
gets(aa);
输入如4 5 6 Enter将会把456
放入a
中,而将""
放入aa
中。
fgets()
并添加错误处理。if (fgets(aa, sizeof aa, stdin) == NULL) Handle_EOF();
if (sscanf(aa, "%d", &a) != 1) Handle_Nonnumeric_Input();
if (fgets(aa, sizeof aa, stdin) == NULL) Handle_EOF();
aa[strcspn(aa, "\n")] = '\0'; // truncate potential \n
#include<stdio.h>
void main()
{
char aa[20];
int b;
scanf("%d",&b);
fflush(stdin);
gets(aa);
puts(aa);
getchar();
}
scanf
失败,请尝试使用clearerr
清除流错误。 - paddygets
可能读取了scanf
之后留下的换行符。此外,永远不要使用gets
,因为没有办法防止缓冲区溢出。请改用fgets
。gets
的手册页面明确说明不应该使用它。 - Tom Karzes