求大神解决一个C语言程序的问题! 用Dev C++和另外一个纯C编译器都没错误,但是用VC++6.0提示错误

#include<stdio.h>
#include<stdlib.h>

typedef struct student
{
int score;
struct student *next;
}stu;

stu *head;
void menu(void)
{
printf("*******************************************\n");
printf("——学生成绩信息系统——\n");
printf("—1.输入该学生1-10门成绩—\n");
printf("—2.输出该学生1-10门成绩—\n");
printf("—3.随机插入该学生成绩—\n");
printf("—4.查找成绩—\n");
printf("—5.保存数据到本地文件—\n");
printf("—0.退出—\n");
printf("*******************************************\n");
printf("请输入序号...");

}

void input(void)
{
head=(stu *)malloc(sizeof(stu));
stu *p=head;
stu *q;
int i=0;
int x;//中间量
int z=1;

while(z)
{
for(i=1;i<=10;i++)
{
printf("请输入第%d个成绩:",i);
scanf("%d",&x);
getchar();
if(x<101&&x>=0)
{
q=(stu *)malloc(sizeof(stu));
q->score=x;
q->next=NULL;
p->next=q;
p=q;
}
else {z=0;break;}
}
}

printf("Complete the input command............\n\n\n");
}

void show(void)
{
stu *p;
p=head->next;
int i=1;
while(p->next!=NULL)
{
printf("第%d科成绩是:%d\n",i,p->score);
p=p->next;
i++;
}

printf("\nComplete the show command............\n\n\n");
}

void insert(void)
{
stu *p,*q;
p=head;
int j=1;
int i,x;

printf("请输入你想要插入的位置以及分数(插入格式为:i,x):");
scanf("%d,%d",&i,&x);
if(i>=0&&i<=10)
{
while(p->next!=NULL&&j!=i)
{
p=p->next;
j++;
}
q=(stu *)malloc(sizeof(stu));
q->score=x;
q->next=p->next;
p->next=q;

printf("Complete the insert command............\n\n\n");

}
printf("请输入正确的插入位置");

}

void search(void)
{
stu *p;
int i=1;
if (head==NULL)
{
printf("\n成绩为空");
return;
}
if(head->next==NULL)
{
printf("\n成绩已经展示完毕!\n");
return;
}
p=head->next;
while(p!=NULL&&i!=10)
{
p=p->next;
i++;
}
if(p!=NULL)

printf("\n第%d门的成绩为%d分\n",i,p->score);
else
printf("\n 抱歉,没有找到相应的分数\n");

printf("Complete the search command............\n\n\n");
}

void save(void)
{
int b;
stu *p=head->next;
FILE *fp=fopen("成绩.txt","w+");
while(fp)
{
printf("%d\n",p->score);
fprintf(fp,"%d\n",p->score);
p=p->next;
}
fclose(fp);
printf("Complete the save command............\n\n\n");
return;
}

int main(void)
{
int i=0;
int z=1;
while(z)
{
menu();
scanf("%d",&i);
getchar();

switch(i)
{
case 1:input();break;
case 2:show();break;
case 3:insert();break;
case 4:search();break;
case 5:save();break;
case 0:z=0;break;
default:printf("请输入正确的序号\n\n\n");
}
}

return 0;
}
已经弄好了,我想知道,这个运行之后输入10个程序之后不会自动结束循环,而是可以再键入新值覆盖,另外,就是如果输入了三科目的成绩,菜单按2进入的时候输出的只有两个成绩,望指教

第1个回答  2017-01-05
报错信息发上来看一下
很可能是scanf的问题
有些环境不让用scanf
只能用scanf_s
看你的代码 并没有输入字符串
把所有scanf改成scanf_s
应该就可以了

还不行 发错误信息。追问

已经弄好了,我想知道,这个运行之后输入10个程序之后不会自动结束循环,而是可以再键入新值覆盖,另外,就是如果输入了三科目的成绩,菜单按2进入的时候输出的只有两个成绩,望指教

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网