一个希奇的问题:百思不得其解
时间:2008-05-13 15:34:01
来源:论坛整理 作者: 编辑:chinaitzhe
- C/C code
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ #include<stdio.h> #include<stdlib.h> #define STU_NUM 2 #define CLASS_NUM 3 void main(void) { FILE *fp; int i = 0, j = 0; char *title = "学号\t姓名\t成绩A\t成绩B\t成绩C\t平均成绩"; char stunum[STU_NUM][2] = {NULL}, stuname[STU_NUM][10] = {NULL}; float grade[STU_NUM][CLASS_NUM] = {0}, sum = 0, aver = 0; if((fp = fopen("stud.txt","w")) == NULL) { printf("can't create file!\n"); exit(0); } fprintf(fp, title); fprintf(fp, "\n"); for(i = 0; i < STU_NUM; i ) { sum = 0; printf("请输入学生%d学号,姓名,3个成绩:\n", i 1); gets(stunum[i]); //为什么第二次循环就不运行了? fprintf(fp, stunum[i]); fprintf(fp, "\t"); gets(stuname[i]); fprintf(fp, stuname[i]); fprintf(fp, "\t"); for(j = 0; j < CLASS_NUM; j ) { scanf("%f", &grade[i][j]); fprintf(fp, "%4.1f\t", grade[i][j]); sum = grade[i][j]; } aver = sum / CLASS_NUM; fprintf(fp, "%4.1f\n", aver); } }
结果如下:
- C/C code
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ 学号 姓名 成绩A 成绩B 成绩C 平均成绩 8 8 8.0 8.0 8.0 8.0 a 4.0 4.0 4.0 4.0
网友回复:stunum一共才4个字节,你第1次输入了几个字符?你gets(stunum[i]);溢出之后发生什么都是正常的。
网友回复:
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#define STU_NUM 2
#define CLASS_NUM 3
void main(void)
{
FILE *fp;
int i = 0, j = 0;
char *title = "学号\t姓名\t成绩A\t成绩B\t成绩C\t平均成绩";
char stunum[STU_NUM][2] = {NULL}, stuname[STU_NUM][10] = {NULL};
float grade[STU_NUM][CLASS_NUM] = {0}, sum = 0, aver = 0;
if((fp = fopen("stud.txt","w")) == NULL)
{
printf("can't create file!\n");
exit(0);
}
fprintf(fp, title);
fprintf(fp, "\n");
for(i = 0; i < STU_NUM; i )
{
sum = 0;
printf("请输入学生%d学号,姓名,3个成绩:\n", i 1);
fflush(stdin);
gets(stunum[i]); //为什么第二次循环就不运行了?
fprintf(fp, stunum[i]);
fprintf(fp, "\t");
gets(stuname[i]);
fprintf(fp, stuname[i]);
fprintf(fp, "\t");
for(j = 0; j < CLASS_NUM; j )
{
scanf("%f", &grade[i][j]);
fprintf(fp, "%4.1f\t", grade[i][j]);
sum = grade[i][j];
}
aver = sum / CLASS_NUM;
fprintf(fp, "%4.1f\n", aver);
}
}
网友回复:
- C/C code
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ #include<stdio.h> #include<stdlib.h> #define STU_NUM 2 #define CLASS_NUM 3 int main(void) { FILE *fp; int i = 0, j = 0; char *title = "学号\t姓名\t成绩A\t成绩B\t成绩C\t平均成绩"; char stunum[STU_NUM][10] = {NULL}, stuname[STU_NUM][10] = {NULL};//stunum空间太小 float grade[STU_NUM][CLASS_NUM] = {0}, sum = 0, aver = 0; if((fp = fopen("stud.txt","w")) == NULL) { printf("can't create file!\n"); exit(0); } fprintf(fp, title); fprintf(fp, "\n"); for(i = 0; i < STU_NUM; i ) { sum = 0; printf("请输入学生%d学号,姓名,3个成绩:\n", i 1); gets(stunum[i]); //为什么第二次循环就不运行了? fprintf(fp, stunum[i]); fprintf(fp, "\t"); gets(stuname[i]); fprintf(fp, stuname[i]); fprintf(fp, "\t"); for(j = 0; j < CLASS_NUM; j ) { scanf("%f", &grade[i][j]); printf("%f ",grade[i][j]); fprintf(fp, "%4.1f\t", grade[i][j]); sum = grade[i][j]; } scanf("%*c"); //上次输入的读入回车 aver = sum / CLASS_NUM; fprintf(fp, "%4.1f\n", aver); } fclose(fp); return 0; }
网友回复:谢谢了,不过中间隔了一句printf("请输入学生%d学号,姓名,3个成绩:\n", i 1);
为什么还得回收回车符
网友回复:
回收回车是因为这条语句:scanf("%f", &grade[i][j]);
在scanf输入时都是以行进行缓冲的,printf只是输入出语句,对缓冲区不影响
在scanf()时每次读入整数或其它非字符时是对回车等空字符忽略的,假如紧接着读入的是字符、或字符串时,输入中的回车也将视为一个字符被读入...
关键字:一个,希奇,问题,百思不得其解,
上一篇:请教一道C 的题目!!谢谢!
下一篇:下面没有链接了











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面