当前位置:编程学习 > C/C++ >>

c语言:为什么结构体里面的数组可以数组名输入,字符数组不能数组名输入?详情见下程序,请解释下原因?

#include<stdio.h> struct Student { int num; char name[20]; }stu; int main() { char string[14]; printf("请输入“I love China!”:\n"); scanf("%s",string); printf("请输入学生的信息(学号,姓名):\n"); scanf("%d%s",&stu.num,stu.name); printf("%s\n",string); printf("%d %s\n",stu.num,stu.name); return 0; } 我就想问,为什么结构体成员的字符数字可以用%s输入,而字符数组不能,且字符数组输出来的就是首元素的值?
追问:为什么%s会是空格输入?什么原理你没说完 请您继续 分我很多啊
答案:scanf("%s",string);
输入 I love China !
string 只读入了 I
因为,%s 格式,用 空白 做分隔符。
残留的 输入部分在缓冲区内,下面的输入语句将用它们。
其他:/*定义一个4个元素的STUDENT结构体数组保存四个学生的信息,求这四个学生的输入姓名时用scanf,不要用gets.gets会把上一个scanf( scanf函数碰到空格就结束当前变量的数据接收,然后开始接收下一个变量的数据,直到格式控制字符串结束为止,或者因某个错误条件而停止输入过程为止。
输入I love China!,这表示string接收了i,stu.num接收了love,这时候出错了,scanf就停止工作。
如果你输入Ilovechina! 45 mingzi就知道了,string接收Ilovechina!,stu.num接收45,stu.name接收mingzi。
scanf("%s",string);改为gets(string);(加头文件string.h)
或者改为scanf("%[^\n]",string);这个意思是除了换行符(回车键)以外,其他字符统统接收(包括空白符),碰到换行符才会结束string的数据接收。
具体百度一下scanf的用法。 输入姓名时用scanf,不要用gets.gets会把上一个scanf("%d%c%d",&((p+i)->age),&((p+i)->sex),&((p+i)->weight)); 输入数据时,最后那个回车接收到,结果就等于你直接输入了一个回车,还没输入姓名.
而且建议
scanf("%d%c%d",&((p+i)->age),&((p+i)->sex),&((p+i)->weight)); 
这句,把%d%c%d之间加上分隔符,比如%d,%c,%d,或者%d %c %d
 

上一个:请问你有c语言软件能在64位运行的吗??
下一个:C语言如何求随机数

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,