c语言 程序设计 C++

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

struct student
{
int number;
char name[10];
float EnglishScore;
float MathScore;
float CLanguageScore;
float averageScore;
}st[50];

int i=0;
FILE *fp;

void shuru()
{
char a;
do{
printf("\n请输入学号:");
scanf("%d",&st[i].number);
fflush(stdin);
printf("\n请输入姓名:");
gets(st[i].name);
printf("请输入英语成绩:");
scanf("%d",&st[i].EnglishScore);
fflush(stdin);
printf("\n请输入高等数学成绩:");
scanf("%d",&st[i].MathScore);
printf("\n请输入C语言成绩:");
scanf("%d",&st[i].CLanguageScore);
fflush(stdin);
printf("\n请输入平均成绩:");
scanf("%d",&st[i].averageScore);
fp=fopen("f1.txt","w");
fprintf(fp,"\n 学号:%s 姓名:%s 英语:%d 数学:%d C语言:%d 平均成绩:%d ");
fclose(fp);
printf("\n是否继续输入下一个学生成绩?(y/n)");
fflush(stdin);
a=getchar();
i++;
}while(a=='y' && i<=50);
}
void main()
{
int change;
do{
system("cls");
printf("**********************************学生成绩管理系统*******************************\n");
printf(" 11111111111111\n");
printf("\t\t按1输入学生成绩\n");
printf("\t\t按2显示学生成绩\n");
printf("\t\t按3查找学生成绩\n");
printf("\t\t按4删除学生成绩\n");
printf("\t\t按5按成绩排序\n");
printf("\t\t按6退出程序\n");
fflush(stdin);
printf("\t\t\t请输入功能选项:");
scanf("%d",&change);
switch(change)
{
case 1:shuru();break;
case 2:xianshi(); break;
case 3:chazhao(); break;
case 4:shanchu(); break;
case 5:paixu(); break;
case 6:break;
}
getch();
}while(change!=6);
}

按1 生成的f1.txt文件不是 自己输入的 学号 姓名 成绩。。。。这些后面出现的都是乱码 不知道哪里出了问题

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
struct student
{
    int number;
    char name[10];
    float EnglishScore;
    float MathScore;
    float CLanguageScore;
    float averageScore;
} st[50];
int i=0;
FILE *fp;
void xianshi();
void chazhao();
void shanchu();
void paixu();
void shuru()
{
    char a;
    do
    {
        printf("\n请输入学号:");
        scanf("%d",&st[i].number);
        fflush(stdin);
        printf("\n请输入姓名:");
        //gets(st[i].name);
        scanf("%s",st[i].name);
        printf("请输入英语成绩:");
        scanf("%f",&st[i].EnglishScore);
        fflush(stdin);
        printf("\n请输入高等数学成绩:");
        scanf("%f",&st[i].MathScore);
        printf("\n请输入C语言成绩:");
        scanf("%f",&st[i].CLanguageScore);
        fflush(stdin);
        printf("\n请输入平均成绩:");
        scanf("%f",&st[i].averageScore);
        fp=fopen("f1.txt","w");
        fprintf(fp,"\n 学号:%d  姓名:%s   英语:%f   数学:%f  C语言:%f  平均成绩:%f ", st[i].number, st[i].name, st[i].EnglishScore, st[i].MathScore, st[i].CLanguageScore, st[i].averageScore);
        fclose(fp);
        printf("\n是否继续输入下一个学生成绩?(y/n)");
        fflush(stdin);
        a=getchar();
        i++;
    }
    while(a=='y' && i<=50);
}
void xianshi()
{
}
void chazhao()
{
}
void shanchu()
{
}
void paixu()
{
}
void main()
{
    int change;
    do
    {
        system("cls");
        printf("**********************************学生成绩管理系统*******************************\n");
        printf("                                                         11111111111111\n");
        printf("\t\t按1输入学生成绩\n");
        printf("\t\t按2显示学生成绩\n");
        printf("\t\t按3查找学生成绩\n");
        printf("\t\t按4删除学生成绩\n");
        printf("\t\t按5按成绩排序\n");
        printf("\t\t按6退出程序\n");
        fflush(stdin);
        printf("\t\t\t请输入功能选项:");
        scanf("%d",&change);
        switch(change)
        {
        case 1:
            shuru();
            break;
        case 2:
            xianshi();
            break;
        case 3:
            chazhao();
            break;
        case 4:
            shanchu();
            break;
        case 5:
            paixu();
            break;
        case 6:
            break;
        }
        getch();
    }
    while(change!=6);
}

调试完毕,出问题地方挺多,主要在shuru()函数中,对照的看一下。

运行结果如下:

 

另外,那几个函数也没写呢吧,任重道远~~

追问

是啊 那些还没写呢
st[i].number, st[i].name, st[i].EnglishScore, st[i].MathScore, st[i].CLanguageScore, st[i].averageScore 主要问题是这个吗 能解释一下 这里出现的问题是什么

追答

这里你原来写的是fprintf(fp,"\n 学号:%s 姓名:%s 英语:%d 数学:%d C语言:%d 平均成绩:%d ");

fprintf函数的格式不是这样的,要写成这样,
fprintf(fp,"\n 学号:%d 姓名:%s 英语:%f 数学:%f C语言:%f 平均成绩:%f ", st[i].number, st[i].name, st[i].EnglishScore, st[i].MathScore, st[i].CLanguageScore, st[i].averageScore);

每一个%type对应后面的一个参数,比如%d对应第一个参数st[i].number,%s对应第二个参数st[i].name,以此类推~~

另外,不同的数值类型要对应不同的%,例如整型int对应%d,浮点型float对应%f,字符串、字符数组对应%s,

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-08
1,你结构体里定义的成绩都是float类型,float类型格式应该为%f,你写的都是%d,或者你将结构体里都定义为int型。

2,fprintf函数少参数,fprintf(fp,"\n 学号:%s 姓名:%s 英语:%d 数学:%d C语言:%d 平均成绩:%d ");有2个问题,学号你定义为int型,但这你要求输入%s,改为
fprintf(fp,"\n 学号:%d 姓名:%s 英语:%f 数学:%f C语言:%f 平均成绩:%f ",
st[i].number, st[i].name, st[i].EnglishScore, st[i].MathScore, st[i].CLanguageScore, st[i].averageScore);
第2个回答  2013-07-08
这个给你改了一下,测试成功了
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>

struct student
{
int number;
char name[10];
float EnglishScore;
float MathScore;
float CLanguageScore;
float averageScore;
}st[50];

int i=0;
FILE *fp;

void shuru()
{
char a;
do{
printf("\n请输入学号:");
scanf("%d",&st[i].number);
fflush(stdin);
printf("\n请输入姓名:");
gets(st[i].name);
printf("请输入英语成绩:");
scanf("%f",&st[i].EnglishScore);
fflush(stdin);
printf("\n请输入高等数学成绩:");
scanf("%f",&st[i].MathScore);
printf("\n请输入C语言成绩:");
scanf("%f",&st[i].CLanguageScore);
fflush(stdin);
printf("\n请输入平均成绩:");
scanf("%f",&st[i].averageScore);
fp=fopen("f1.txt","w");
fprintf(fp,"\n 学号:%d 姓名:%s 英语:%f 数学:%f C语言:%f 平均成绩:%f ", st[i].number, st[i].name, st[i].EnglishScore, st[i].MathScore, st[i].CLanguageScore, st[i].averageScore );
fclose(fp);
printf("\n是否继续输入下一个学生成绩?(y/n)");
fflush(stdin);
a=getchar();
i++;
}while(a=='y' && i<=50);
}
void main()
{
int change;
do{
system("cls");
printf("**********************************学生成绩管理系统*******************************\n");
printf(" 11111111111111\n");
printf("\t\t按1输入学生成绩\n");
printf("\t\t按2显示学生成绩\n");
printf("\t\t按3查找学生成绩\n");
printf("\t\t按4删除学生成绩\n");
printf("\t\t按5按成绩排序\n");
printf("\t\t按6退出程序\n");
fflush(stdin);
printf("\t\t\t请输入功能选项:");
scanf("%d",&change);
switch(change)
{
case 1:shuru();break;
case 2:xianshi(); break;
case 3:chazhao(); break;
case 4:shanchu(); break;
case 5:paixu(); break;
case 6:break;
}
getch();
}while(change!=6);
}祝你愉快!你的错误在于%d和fprintf,要记住他们的用法。记得采纳哈!
第3个回答  2013-07-08
用short类型,不要用char
相似回答