#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<stdlib.h>
#define classes 3
#define grades 5
int a[classes][grades];
void Enter();
void show();
void main()
{
char ch;
for(;;)
{
do{
printf("input'E',输入数据\n");
printf("input'R',读取数据\n");
printf("input'Q',退出程序\n");
flushall(); //功能清除所有缓冲区,头文件:stdio.h
ch=toupper(getchar());
}while(ch!='E'&&ch!='Q'&&ch!='R');
switch(ch)
{
case 'E':Enter();break;
case 'R':show();break;
case 'Q':exit(0);
}
}
}
int get(int num)
{
char s[80];
printf("输入%d号学生成绩:",num+1);
scanf("%s",s);//gets(s);//
return(atoi(s));
}
void Enter()
{
int i,j;
for(i=0;i<classes;i++)
{
printf("%d班同学的成绩:\n",i+1);
for(j=0;j<grades;j++)
a[i][j]=get(j);
}
}
void show()
{
int i,j;
for(i=0;i<classes;i++)
{
printf("%d班同学的成绩:\n",i+1);
for(j=0;j<grades;j++)
printf("%d\t",a[i][j]);
printf("\n");
}
}
在get函数中为什么用gets(s)会出错,而scanf("%s",s)不会出错,能解释一下gets(s)和scanf("%s",s)的区别吗?
能说的具体些吗?
追答例如输入abc 12345 89按回车
如果用gets(s)接收,字符数组s将保存abc 12345 89\0
而用scanf("%s",s)接收,字符数组s将保存abc\0.
这说明gets遇到回车才停止接收,而scanf("%s")碰到空白符停止接收
知道,我就是不懂为什么第一个输入的数据会没有
参考资料:百度百科gets