为什么funciton得不到工作并跳过用户输入?

时间:2016-02-15 04:40:15

标签: c

#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{
    char aa[35];
    int a;
    scanf("%d",&a);
    gets(aa);
    puts(aa);
}

它没有从用户那里获取字符串,但是如果我在整数值之前取字符串就可以了。

4 个答案:

答案 0 :(得分:0)

尝试放置另一个gets():

gets(aa);
gets(aa);

答案 1 :(得分:0)

一旦scanf("%d",&a);stdin中取出数字字符以形成int的{​​{1}},就完成了。它不会消耗可能跟随它的a

'\n',直到gets(aa);消费数据。

输入如 1 2 3 x y 输入到下面会将'\n'放入123,将a放入"xy"

aa

输入如 4 5 6 输入到上面将scanf("%d",&a); gets(aa); 放入{{ 1}}和456加入a

建议使用""并添加错误处理。

aa

答案 2 :(得分:0)

有关详细信息,请搜索Google有关缓冲IO的信息 在这种情况下,因为当你首先输入一个数字时,你还必须按“输入”,这意味着在接受一个数字后会有一个“\ n”字符停留 因此,在输入任何字符串之前,请记住清除缓冲的IO,有两种方法可以做到这一点 Flush(stdin); 要么 _flushall();

答案 3 :(得分:-1)

在scanf之间使用fflush并清除缓冲区。它会完美地运作。

#include<stdio.h>
void main()
{
    char aa[20];     
    int b;
    scanf("%d",&b);
    fflush(stdin);
    gets(aa);
    puts(aa); 
    getchar();
}

建议你不要使用gets(),因为它不验证内存的大小。