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语言如何求随机数