C语言的中gets(s)和scanf("%s",s)的区别
#include<stdio.h>#include<stdlib.h>#include<ctype.h>#include<stdlib.h>#defineclasses3...
#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)的区别吗? 展开
#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)的区别吗? 展开
5个回答
展开全部
【1】函数:gets(字符指针)
【2】头文件:string.h(c中),c++不需包含此头文件
【3】原型:char *gets( char *buffer );
【4】功能:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。
get(s)返回的是一个指针
get(s)是与scanf("%s",&s)相似的 不是scanf("%s",s)相似
【2】头文件:string.h(c中),c++不需包含此头文件
【3】原型:char *gets( char *buffer );
【4】功能:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。
get(s)返回的是一个指针
get(s)是与scanf("%s",&s)相似的 不是scanf("%s",s)相似
参考资料: 百度百科gets
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
二者都是从终端读入字符串。功能为
1、 gets功能为读入一行,并将换行符转换为字符串结束符。
2、 scanf("%s",s);读入时,遇到空白字符,包括空格,制表符,换行符时均会停止输入。
从功能上可以看出不同之处:
1 终止条件不同。gets只有遇到\n时才会结束输入,而scanf遇到空格或制表符时,也会结束输入。
比如输入"test string\n"。
用gets得到的字符串为"test string", 二用scanf得到的是"test"。
2 终止后,对终止字符处理不同。
比如输入为"test\nabcd"。
执行gets后,\n不会留在缓冲区中,即这时调用getchar得到的字符是'a'。
执行scanf后,\n会留在缓冲区,这时调用getchar得到的字符是'\n'。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以把那语句写两次(重复的)。。。。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
二者都是从终端读入字符串。功能为
1、 gets功能为读入一行,并将换行符转换为字符串结束符。
2、 scanf("%s",s);读入时,遇到空白字符,包括空格,制表符,换行符时均会停止输入。
从功能上可以看出不同之处:
1 终止条件不同。gets只有遇到\n时才会结束输入,而scanf遇到空格或制表符时,也会结束输入。
比如输入"test string\n"。
用gets得到的字符串为"test string", 二用scanf得到的是"test"。
2 终止后,对终止字符处理不同。
比如输入为"test\nabcd"。
执行gets后,\n不会留在缓冲区中,即这时调用getchar得到的字符是'a'。
执行scanf后,\n会留在缓冲区,这时调用getchar得到的字符是'\n'。
1、 gets功能为读入一行,并将换行符转换为字符串结束符。
2、 scanf("%s",s);读入时,遇到空白字符,包括空格,制表符,换行符时均会停止输入。
从功能上可以看出不同之处:
1 终止条件不同。gets只有遇到\n时才会结束输入,而scanf遇到空格或制表符时,也会结束输入。
比如输入"test string\n"。
用gets得到的字符串为"test string", 二用scanf得到的是"test"。
2 终止后,对终止字符处理不同。
比如输入为"test\nabcd"。
执行gets后,\n不会留在缓冲区中,即这时调用getchar得到的字符是'a'。
执行scanf后,\n会留在缓冲区,这时调用getchar得到的字符是'\n'。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |