求讲解啊!!!
#include <stdio.h>
#include <string.h>
#define input scanf
struct record
{
double math;
double english;
double chinese;
double physics;
};
struct student
{
char num[20];
char name[10];
char sex[5];
int old;
struct record record[2];
double avgreco;
double sumreco;
};
int main()
{
struct student students[2];
input("%s",&students[0].num);
input("%s",&students[0].name);
input("%s",&students[0].sex);
input("%d",&students[0].old);
input("%f",&students[0].record[0].math);
printf("%f\n",students[0].record[0].math);
students[1]=students[0];
printf("%s %s %s %d %f\n",students[1].num,students[1].name,students[1].sex,students[1].old,students[1].record[1].math);
return 0;
}
//students[0].record[0].math 编译不会报错,但是输出的值不是自己输入的值。怎么会这样啊????
[解决办法]
你程序里也没有输出那个啊。。。
[解决办法]
问题有以下几个:
第一:请将struct student中关于record的记录改为非数组
第二:将record中的多有数据定义改为float
[解决办法]
input("%f",&students[0].record[0].math);
应该是 input("%lf",&students[0].record[0].math);
其他的也不对
int main(){ struct student students[2]; input("%s",students[0].num); input("%s",students[0].name); input("%s",students[0].sex); input("%d",&students[0].old); input("%lf",&students[0].record[0].math); printf("%f\n",students[0].record[0].math); students[1]=students[0]; printf("%s %s %s %d %f\n",students[1].num,students[1].name,students[1].sex,students[1].old,students[1].record[0].math); return 0;}
[解决办法]
不是很明白你的意思诶,你想要的输入是什么,想要的输出又是什么?
[解决办法]
发生问题的原因是:
1、struct student中的record记录是数组,而程序中只输入了record[0],所以在输出时是内存中的随机值。解决办法就是将record数组改为结构体变量。
2、record中的数据定义为double型,通常占用两个机器字长的内存(一般为8字节/64位),而输入时使用的%f格式包括float型和double型,由编译器决定如何取缓冲区的内容,所以结果可能出现异常。解决办法是使用cin输入或直接定义为float。
[解决办法]
补充说明:楼上关于输入格式的解释错误的。因为%f格式是输入单精度实数(float型),要输入双精度数(double)需要使用%lf