关于c语言scanf()库函数语句使用的一些问题

为什么在这里要在scanf()函数格式控制符中插入空格才能使代码正常运行?
#include"stdio.h"#define N 3void main(){ struct staff { char num[10]; char name[12]; char sex; char id[20]; double page; char add[20]; }; struct staff a[N]; printf("请分别输入者%d位员工的职工号、姓名、性别、身份证、工资、地址,并用空格隔开!\n",N); int i; for(i=0;i<N;i++) { printf("请输入第%d位员工的信息",i+1); scanf("%s %s %c %s %lf %s",a[i].num,a[i].name,&a[i].sex,a[i].id,&a[i].page,a[i].add); printf("\n"); } printf("这%d位员工的信息如下\n",N); printf("职工号\t姓名\t性别\t身份证\t工资\t地址\n"); for(i=0;i<N;i++) { printf("%s\t%s\t%c\t%s\t%lf\t%s",a[i].num,a[i].name,a[i].sex,a[i].id,a[i].page,a[i].add); printf("\n"); }

}

在scanf的输入中,空格是隔开多个输入数据在输入缓冲区中的标志
也就是说,只有空格才能隔开多个输入的数据
反过来说,scanf无法在%s的输入中输入空格
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-23
scanf("%s %s %c %s %lf %s",a[i].num,a[i].name,&a[i].sex,a[i].id,&a[i].page,a[i].add);
因为这句有%s和%c所以要空格,表示输入忽略一个空格,因为%c和%s不忽略任何字符,所以前面的空格也读进去了,后面就乱了,而%d就不用他自动忽略前面的空格的
第2个回答  2014-01-23
不然的话scanf就把你输入的那些空格当成字符给变量赋值了。这样赋值的顺序就全乱套了。
第3个回答  2014-01-23
对于在scanf函数中出现的非格式控制字符,输入时要求原样输入,例如上面%s %s之间的空格也要输入
相似回答