肯德基的鸡翅怎么做:C程序设计中,设计一个顺序结构程序,有时scanf函数不执行是什么原因呀?

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/19 23:05:51
下面是个例子
题目:编写一个函数print,输出一个学生的成绩数组,该数组有5个学生的数据记录,每个记录包括num,name,score[3],用主函数输入这些记录,用print函数输出这些记录.
#include<stdio.h>
struct student
{
int num;
char name[8];
float score[3];
}
main()
{
void print(struct student stu[],int n);
struct student stu[5];
int i,j;
for(i=0;i<5;i++)
{
printf("input No.%d student\'s num:\n",i+1);
scanf("%d",&stu[i].num);
printf("input No.%d student\'s name:",i+1);
scanf("%s",stu[i].name);
printf("input No.%d student\'s score",i+1);
scanf("%f%f%f",&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]); /*这句在程序运行是没有用*/
}
print(stu,5);
}
void print(struct student stu[],int n)
{
int i;
printf("num name score1 score2 score3\n");
for(i=0;i<n;i++)
{
printf("%d\t%s\t%.2f\t%.2f\t%.2f\n",stu[i].num,stu[i].name,stu[i].score[0],
stu[i].score[1],stu[i].score[2]);
}
}
我碰到好几次这种情况了,请知道是什么原因的人帮忙一下,谢谢了!!!
在调试时,在上一个输入函数中输入name项后应该打回车吧,一打回车程序就回到编辑壮态.如果进行单目调试,到这一步就什么也不执行

TC开发时(80年代)DOS下的存储资源紧缺,因此TC在编译时尽量不加入无关部分。在没发现需要做浮点转换时,就不将这个部分安装到可执行程序里。但有时TC不能正确识别实际确实需要浮点转换,即struct中的浮点类型没被tc预计到,就会出错。

解决方法:设法告诉TC需要做浮点数输入转换。最简单的说把float类型都换成double,然后在主程序中设个double类型的变量,用scanf先存储到该变量中,然后再给结构体double成员赋值。
#include<stdio.h>
struct student
{
int num;
char name[8];
double score[3];
}
main()
{
void print(struct student stu[],int n);
struct student stu[5];
int i,j;
double t1,t2,t3;
for(i=0;i<5;i++)
{
printf("input No.%d student\'s num:\n",i+1);
scanf("%d",&stu[i].num);
printf("input No.%d student\'s name:",i+1);
scanf("%s",stu[i].name);
printf("input No.%d student\'s score",i+1);
scanf("%lf%lf%lf",&t1,&t2,&t3);
stu[i].score[0]=t1;
stu[i].score[1]=t2;
stu[i].score[2]=t3;
}
print(stu,5);
}
void print(struct student stu[],int n)
{
int i;
printf("num name score1 score2 score3\n");
for(i=0;i<n;i++)
{
printf("%d\t%s\t%.2f\t%.2f\t%.2f\n",stu[i].num,stu[i].name,stu[i].score[0],
stu[i].score[1],stu[i].score[2]);
}
}

tc中会出现这样的错误!

当结构中的成员有float类型时,程序运行到scanf输入该成员时,就会出现这样的错误:
scanf:floating point formats not linked
Abnormal program termination

楼上说的没错!程序本身是没有错误的!你可以把float换成int double都可以正确运行!

输入的时候没用空格或者,格开?