求大神解决一个C语言程序的问题! 用Dev C++和另外一个纯C编译器都没错误,但是用VC++6.0提示错误 20
#include<stdio.h>#include<stdlib.h>typedefstructstudent{intscore;structstudent*next;}...
#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进入的时候输出的只有两个成绩,望指教 展开
#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进入的时候输出的只有两个成绩,望指教 展开
展开全部
报错信息发上来看一下
很可能是scanf的问题
有些环境不让用scanf
只能用scanf_s
看你的代码 并没有输入字符串
把所有scanf改成scanf_s
应该就可以了
还不行 发错误信息。
很可能是scanf的问题
有些环境不让用scanf
只能用scanf_s
看你的代码 并没有输入字符串
把所有scanf改成scanf_s
应该就可以了
还不行 发错误信息。
追问
已经弄好了,我想知道,这个运行之后输入10个程序之后不会自动结束循环,而是可以再键入新值覆盖,另外,就是如果输入了三科目的成绩,菜单按2进入的时候输出的只有两个成绩,望指教
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询