鱼C论坛

 找回密码
 立即注册
查看: 2677|回复: 7

帮我看看这个float结构体代码错在哪里?为什么手机可以运行?

[复制链接]
发表于 2012-7-6 15:20:15 | 显示全部楼层 |阅读模式
1鱼币
为什么在输入分数的时候会报错呢?如果在下面的printf不注释的话,就可以,为什么?是不是因为我的电脑重装系统的原因?因为我的手机上c4droid可以通过,在VC上输入分数就debug error?
#include <stdio.h>
#define N 50
int n=0;
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
}stu[N];
main()
{
printf("学号:");
scanf("%d",&stu[n].num);
printf("姓名:");
scanf("%s",stu[n].name);
printf("性别:");
scanf("%c",&stu[n].sex);getchar();
printf("年龄:");
scanf("%d",&stu[n].age);
printf("分数:");
scanf("%f",&stu[n].score);
//printf("%f",stu[n].score);
printf("继续?(y/n)");
}

小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-7-6 17:38:05 | 显示全部楼层
这个问题应该不难吧!有木有哪位好心的大哥大姐帮帮我吧!!!谢谢啊!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-6 19:07:24 | 显示全部楼层
这是完成代码吗?  :o
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-6 19:08:05 | 显示全部楼层
#include <stdio.h>
#define N 50
int n=0;
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
}stu[N];
main()
{
printf("学号:");
scanf("%d",&stu[n].num);

printf("姓名:");
scanf("%s",stu[n].name);
fflush(stdin);
printf("性别:");
scanf("%c",&stu[n].sex);
fflush(stdin);
printf("年龄:");
scanf("%d",&stu[n].age);
fflush(stdin);
printf("分数:");
scanf("%f",&stu[n].score);
printf("%f",stu[n].score);
printf("继续?(y/n)");
return 0;
}
这个错误,我给很多人解决过,但是还是一直有人问。这个是输入缓冲区清空的问题,一般是字符串,或者字符输入会出现这样的情况,连续输入。例如连续出现两个getchar,或者scanf("%s",XXX)这类情况。。。因为当你键盘输入的字符是存储在一个输入缓冲区中,是从输入缓冲区读取然后加载进内存,每一次读取完以后系统会自动清空,但是当出现两个连续的输入语句时,系统还来不及清空第一次输入的字符,第二次读取的时候发现输入看、缓冲区还有字符,就直接读取了,不会等待你输入。。。然后我在你代码中间加了几个fflush函数  这个函数的功能就是专门用来清空输入缓冲区的

评分

参与人数 1鱼币 +5 收起 理由
丿夏夜灬彬刂 + 5 很给力!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-7 09:51:18 | 显示全部楼层

这是我们期末实训的项目,当初我们做的不怎么样,我现在就想一个人独立完成,谁知道这代码几乎一模一样,就出这问题,主要是那个分数那里卡住了,那条注释printf是我自己加上去的,要是分数那里没有printf,就会报错,还有,我的VC6.0为什么会在分数后面的printf加注释第一次编译,运行正常,第二次就报错啊?帮帮我吧,谢谢了!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-7 09:56:26 | 显示全部楼层
Tzdner_C 发表于 2012-7-6 19:08
#include
#define N 50
int n=0;

貌似还是不能解决啊!你把那个倒数第四行printf("%f",stu[n].score);注释掉,那是我自己加的,还是会报错,也许不会报错,那就新建一个工程,重新复制代码,肯定会运行到分数那里,再输入就出错,不知道是不是我的编译器有问题。。。帮下忙,试一下,谢谢了!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-7 14:35:09 | 显示全部楼层
394428311 发表于 2012-7-7 09:56
貌似还是不能解决啊!你把那个倒数第四行printf("%f",stu[n].score);注释掉,那是我自己加的,还是会报错 ...

我试过了。。。我试的时候注释掉的也去掉了。。。你用我贴的代码啊 !   我没那么多时间去给你解决重复的事情。。。我既然改过了那就说明没有问题,我试过的。。。。  
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-21 22:02:37 | 显示全部楼层
还是我自己说吧!我已经知道了,是VC编译器的问题,当初微软设计的时候,好像是为了节省内存,就。。。最后带来的后果就是,要么一开始就初始化,要么就在输入后输出,只要在本函数内就行,就是这样。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-14 02:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表