到底哪里有問題,不輸出結果就停止了

uj5u.com熱心網友回復:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct sp
{
int xuehao;
/*
原為
char xingroing[4];
char xingbie[1];
char kecheng[7];
改為*/
char xingroing[9];
char xingbie[3];
char kecheng[15];
//原因 : 漢字占兩個位元組(char),而且輸出字串時有\0結尾,如"男"包括三個位元組
int chengji;
};
int main(uoid)
{
int j;
double jigelv;
int jige=O;
int count=O;
int flag=O;
char chazhao[15];//原為char chazhao[7];
struct sp student;
FILE *fp;
printf("請輸入要計算及格率的課程名稱:");
scanf("%s",chazhao);
printf("\n計算結果為: \ n");
fp=fopen("xscj.txt","r") ;I
if(fp==NULL)
{
printf("can not open file!\n");
exit(1);
}
//注:以下陳述句容易溢位
j=fscanf(fp,"%d %s %s %s %d",&student.xuehao,student.xingming,student.xingbie,student.kecheng,&student.chengji);
while (j==5){
flag=1;
if(strcmp(student.kecheng,chazhao)==O)
{
//以下陳述句錯誤
//printf("%d %s %c %s %d",&student.xuehao,student.xingming,student.xingbie,student.kecheng,&student.chengji);
//改為
printf("%d %s %c %s %d",/*&*/student.xuehao,student.xingming,student.xingbie,student.kecheng,/*&*/student.chengji);
//原因:非陣列使用printf不用地址,直接用資料
flag=1;
j=fscanf(fp,"%d %s %s %s %d",&student.xuehao,student.xingming,student.xingbie,student.kecheng,&student.chengji);
//添加以下陳述句
count++;
if (student.chengji >= 60) jige++; // 將過(包括)60作為及格
//原因:計數時使用
}
}
if(flag==O)
{
printf("檔案中沒有名稱為\"%s\"的課程\n",chazhao);
}
if(flag==1)
{
//更改一下陳述句
//jigelv=jige/count;
//printf("課程\"%s\"有%d人選學,其中及格%d人,及格率為%f",chazhao,count,jige,jigelv);
jigelv = (double)jige/count;
printf("課程\"%s\"有%d人選學,其中及格%d人,及格率為%lf"/*前面的f改為lf*/,chazhao,count,jige,jigelv);
//原因:jigelv是double,而jige和count都是int,需要型別轉換, float用f,double用lf
}
return O;
}
經供參考,還有,樓主,你真該學學英語了
uj5u.com熱心網友回復:
樓主的讀寫應該是陣列越界了,定義的陣列長度太小了,需要考慮'\0'轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/84718.html
標籤:C語言
上一篇:自增運算子問題
下一篇:代碼:
