c中的scanf()函数问题?

时间:2015-07-25 07:14:32

标签: c

#include<stdio.h>
void main()  
 {  
  int i;  
   char a[20];   
   char b[20];   
   scanf("%d",&i);  
    gets(a);   
    puts(a);  
gets(b);  
puts(b); 

}

此处,在输入&#39; a&#39;之后它打印了i和a的值。它没有取值&#39; b&#39;。我如何插入&#39; b&#39;的价值?

2 个答案:

答案 0 :(得分:2)

1)永远不要使用gets,它已从C标准中删除,并且不安全。请改用fgets,(例如fgets(a, sizeof a, stdin);)。请注意,fgets不会从字符串末尾删除换行符。

2)main的返回类型为int,而不是void

3)阅读scanf后,i不会使用换行符,因此gets(a)会导致a为空字符串,因为它会读取从中缓冲的换行符当用户在键入数字后按下返回键。然后gets(b)会读取您认为的a。 (在阅读每个值之前打印一些提示,然后你会看到。或者尝试输入: 1 a 输入 b < / KBD> 输入

建议的解决方案:使用fgetsi读入缓冲区,然后例如atoistrtol将其转换为整数。 (或者您可以在fgets之后额外scanfgetchar循环播放,直到您阅读换行符为止,但是,严肃地说,fgets解决方案是现在更加健壮,值得学习。)

答案 1 :(得分:0)

  gets(a);   

不要使用gets它是邪恶的。试试fgets

#include<stdio.h>
int main()   //declare here `int main()`
 {  
     int i;  
     char a[20],c[10];   
     char b[20];   
     fgets(c,sizeof c,stdin);
     i=atoi(c);         
     fgets(a,sizeof a,stdin);   
     puts(a);  
     fgets(b,sizeof b,stdin);  
     puts(b); 
     return 0;
 }