c语言:有关scanf的问题……

来源:百度知道 编辑:UC知道 时间:2024/06/16 19:58:40
对于新手来说scanf有时的确让人无语……
根本不是想象中的那么简单……
出错的程序:
#include "stdio.h"
struct emploee{char num[6],name[8],sex[3],add[20],state[8],class[4];int age;float salar;}em[10];
void main()
{
FILE*fp;int i;
printf("职工号 姓名 性别 年龄 住址 工资 健康状况 文化程度\n");
for(i=0;i<4;i++)scanf("%s%s%s%d%s%f%s%s",em[i].num,em[i].name,em[i].sex,&em[i].age,em[i].add,&em[i].salar,em[i].state,em[i].class);
fp=fopen("emploee","w");
for(i=0;i<4;i++)fwrite(&em[i],sizeof(struct emploee),1,fp);
fclose(fp);
}
错误就在那个scanf那儿,目前发现是float类型那有问题。
对此,那哪位大大能告诉在下为何会错。
好像是和键盘缓冲区有关吧。
帮忙解析下原理和如何避免此类问题~
谢谢~
L1的朋友……
对了,我是用TC 2.0编的。
不用for,编个输入一个float数值的话,倒是没问题。
就类似是L2的朋友写的那样,那样应该是对的,应该是可以执行的。
用for写的数组类(如float a[4])好像也行,就是用结构体类会出问题……
我想知道为何会这样……
用TC运行没问题?……
scanf:floatint point formats not linked
后面还跟了句说程序被终止的英文……
+空格是没用的,我又试了下……

TC下编译环境里,如果没有浮点数的运算, 在链接时,就不会链接上浮点数链接库,所以就会出现上面的错误,在程序中加入一个关于浮点数的运算,则编译器会链接时加上这个库#include<math.h> float x=cos(0.0);
但不能用float x=3.333*2.222,两个浮点数乘法,计算机硬件就能实现,那么编译器就不会将浮点数处理库也连入你的程序

另一个解决方法就是用临时float变量来接受用户输入,再将输入的值赋给数组,如下:
float temp;
a[i].data[j]=temp;

类看过去好像没有什么错。

如果你是TC编译器的话
你试一下,main的开始,加一下:
float a=1,*pa=a;
再运行看看。

将 class
改成
Class

scanf("格式", &变量名)
如果变量名不是数组名的话"&"一定不能忘。

for(i=0;i<4;i++)
scanf("%s %s %s %d %s %f %s %s",em[i].num,em[i].name,em[i].sex,&em[i].age,em[i].add,&em[i].salar,em[i].state,em[i].class);
在%s%s之间加上空格然后输入的时候以空格为价格符

我看错了,不好意思