有关结构的小问题。。请教

KyoUs 2002-09-22 09:23:14

#include <stdio.h>
#define N 3
struct staff
{
char num[7];
char name[10];
double score;
} student[N];
void savef ( void )
{
FILE* fp;
int i;
if ((fp=fopen("work.dat","wb"))==NULL)
{
printf("Can not open the file.\n");
return;
}
for (i=0;i<N;i++)
if (fwrite(&student[i],sizeof(struct staff),1,fp)!=1)
printf("File write error.\n");
fclose(fp);
}
void main(void)
{
printf("\nInput %d student\'s No. name score:\n",N);
for (int i=0;i<N;i++)
{
gets(student[i].num);
gets(student[i].name);
scanf("%*c%f",&student[i].score);
}
savef();
}
-------------------------------------------
主要是scanf("%*c%f",&student[i],score);这句有问题。。。和我想的不一样

怎么改??
...全文
17 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
KyoUs 2002-09-25
  • 打赏
  • 举报
回复
谢谢了~~~基本上明白了。。。。还学会了不少。。
最后问一问。。虽然看不到flaot的显示,但当我读出时,符值时应该没问题把??

马上给分~~
sjd163 2002-09-23
  • 打赏
  • 举报
回复
to 符号
关于结构中浮点数的输入,以前也遇到过。这可能是borland的一个bug。tc2.0,bc++3.1都有。解决的办法是在main中定义一个double过度一下。
WaterWalker 2002-09-23
  • 打赏
  • 举报
回复

void main()
{

printf("\nInput %d student\'s No. name score:\n",N);

for (int i=0;i<n;i++)
{
--------------------------------------------------------------
//在输入字符串前应该把buff晴空。不然可能出错。
//假设你上次输入:****回车 ,注意回车也是一个字符。系统就把他当成你
//的gets输入。
flushall();
gets(student[i].num);
flushall();
gets(student[i].name);
-------------------------------------------------------------------
你的score用的double,是长浮点数。输入的格式是: %lf
scanf("%lf",&student[i].score);
}
for( i=0; i<n; i++ )
printf( "%s \t %s \t %0.2f\n",student[i].num, student[i].name,student[i].score );
return;
}
azuretttc 2002-09-23
  • 打赏
  • 举报
回复
我想大概是这样的:在savef()中你以二进制方式输出到文件中,但你是怎么测试的呢?是用写字板之类的东西?它只会把数据以字符方式显示,因此你以字符存的数据没问题,而且以int存的,会自动转换成char,也没问题,但float就没这么幸运了,它占4个字节,因此显出的当然是相对应的ASCILL字符,当然就是乱吗了 !
sjd163 2002-09-22
  • 打赏
  • 举报
回复
sleep!
sjd163 2002-09-22
  • 打赏
  • 举报
回复
乱码不一定是问题。你读出看看。
我这里那样写,运行到输入浮点数则退出。
KyoUs 2002-09-22
  • 打赏
  • 举报
回复
改成这样了。。输入没问题。。但,有关数字的地方,都是乱码。
---------------------------------
printf("Please input to num\n");
if (i>0)scanf("%*c");
gets(student[i].num);

printf("Please input to name\n");
gets(student[i].name);

printf("Please input to score\n");
scanf("%f",&student[i].score);
sjd163 2002-09-22
  • 打赏
  • 举报
回复
建议双精度数按字符串输入然后再变回来。
GOTO_2002 2002-09-22
  • 打赏
  • 举报
回复
我这和sjd163相同,只要把double改成int,就可以了,不知道为什么。不过work.dat中到不是乱麻。tc2.0
KyoUs 2002-09-22
  • 打赏
  • 举报
回复
你们说的我都试过了。。

还是不行。。生成的work.dat中。。关于数字的都是乱码~~
sjd163 2002-09-22
  • 打赏
  • 举报
回复
试不成。
将student[i].score改为int 马上就没问题。
为什么???
学习万物互联 2002-09-22
  • 打赏
  • 举报
回复
倒,没仔细看,看错了。。。^_^

scanf(" %c%f",&student[i].score);

GOTO_2002 2002-09-22
  • 打赏
  • 举报
回复
...........楼上的,这行吗?score在main中没有定义过啊~~~~~
学习万物互联 2002-09-22
  • 打赏
  • 举报
回复
scanf(" %c%f",&student[i],&score);
KyoUs 2002-09-22
  • 打赏
  • 举报
回复
题目本意是想把3个学生的数据保存到work.dat中
但scanf("%*c%f",&student[i].score);只不能存。。。

gets(student[i].num); //输入学生的编号
gets(student[i].name); //学生名字

大家不要光看,到自己的机子上试一试。。

谢谢了。
sjd163 2002-09-22
  • 打赏
  • 举报
回复
应该
scanf("%f",&student[i].score);
但程序还有其它错误。

gets(student[i].num);
gets(student[i].name);
到底有什么值???

KyoUs 2002-09-22
  • 打赏
  • 举报
回复
关键不是这。。。%*c我是想忽略上面的一个回车。。。
zhujiaqi 2002-09-22
  • 打赏
  • 举报
回复
%*c是什么格式,好象不能这么用

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧