C语言结构体赋值问题

来源:百度知道 编辑:UC知道 时间:2024/05/14 13:17:05
结构体数组赋值问题我在使用结构体数组的时候遇到这个问题,想了好长时间也没弄明白其中的原因,程序如下:

main()
{
struct abc
{
char name;
int a;
float b;
};
struct abc stu[3];
int i;
printf("please input:\n");
for(i=0;i<3;i++)
scanf("%c %d %f",&stu[i].name,&stu[i].a,&stu[i].b);
printf("you just input:\n");
for(i=0;i<3;i++)
printf("%-5c%-10d%-10.2f",stu[i].name,stu[i].a,stu[i].b);
}

这是一个试验程序,在给结构体数组赋值后就原样输出以验证赋值是否正确。但是程序执行时没有显示结果即退出。把结构体数组改成只有一个结构体变量,程序如下:

main()
{
struct abc
{
char name;
int a;
float b;
};
struct abc stu;
printf("please input:\n");
scanf("%c %d %f",&stu.name,&stu.a,&stu.b);
printf("%5c%10d%10.2f",stu.name,stu.a,stu.b);
}

编译执行,可以得到预期结果。我想验证是不是循环的问题,又将程序改成下面这样:不用求输入数据,而在程序内部给结构体变量数组赋初值,然后再用循环输出,程序如下:

之所以出现你说的问题,是因为当执行
for(i=0;i<3;i++)
scanf("%c %d %f",&stu[i].name,&stu[i].a,&stu[i].b);
这步的时候,由于回车也算是一个字符,循环的时候把回车也赋给name了/所以输出的时候就会错误了.想解决这个问题只要把回车那个字符给吃掉就可以了.把这个循环改成:
for(i=0;i<3;i++)
{
scanf("%c %d %f",&stu[i].name,&stu[i].a,&stu[i].b);
getchar();
}
就没问题了.

按你的程序你要这样输入才行:
a 1 3b 2 5c 3 6

如果是这样:scanf("%c %d %f\n",&stu.name,&stu.a,&stu.b);
则可以这样一行一行输入:
a 1 3
b 2 5
c 3 6

你所谓的加粗的两行我没看到,不过我还是找到了你的错误,注意错误如下:
scanf(\"%c %d %f\",&stu[i].name,&stu[i].a,&stu[i].b);
在你循环输入的时候,你的第一个要输入的数据都是字符,当然第一次输入值传进去了,当你要输入第二个值时,你要敲回车(在计算机中键盘上的键它都认为是字符),所以计算机也把回车当作字符了,这样你后便输入的值也就牛头不对马嘴了,所以输出的是乱码(第一组数据对,后面的就乱了),所以你要注意在输入字符的时候最好在 c%前空一格,以防万一。修改上句如下:
scanf(\" %c %d %f\",&stu[i].name,&stu[i].a,&stu[i].b);