意外的结果结构C.

时间:2016-11-21 20:34:43

标签: c struct

我是C的初学者,我在c中遇到结构问题,我创建了一个结构p [2]的数组,然后取了输入并打印出来但结果是意外的,结构被定义为< / p>

struct person{
int eno;
float height;
char name[10];
}p[2];

和主要功能为

int main(void)
{
 int i;
 for(i=0;i<2;i++)
  {
   scanf("%d%f",&p[i].eno,&p[i].height);
   fgets(p[i].name,10,stdin);
  } 
  for(i=0;i<2;i++)
  {
    printf("%d\n",p[i].eno);
    printf("%f\n",p[i].height);
    puts(p[i].name);
  }
  return 0;
}


Input :
10
11.0
abcdef
11
12.3
xyzpa

Output:
10
11.000000


0
0.000000
abcdef

以下是Ideone链接:http://ideone.com/8gIQU3

1 个答案:

答案 0 :(得分:1)

这是因为fgets()通过扫描数字在输入缓冲区中留下了行尾。将whitspace添加到数字格式字符串的末尾。

此外,在依赖它之前,您应该始终检查scanf()是否已成功。 I / O很脆弱,可能会失败,尤其是当另一端是人类时。