-
2020-11-21 11:28:00
#gets和scanf都是可以在C语言中用于读取字符串的,但是它们实际上也有很大的不同,本篇文章我们就来看一下gets和scanf之间有什么区别。
gets和scanf的区别
1、 gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。
例如:如果输入为"hello world"时,上面程序的运行结果是"hello world"。而如果用scanf则只能输出hello
2、scanf 对末尾回车符的处理:把回车符保留在缓存中。gets对末尾回车符的处理:接收回车,但把回车替换为\0.**
3、gets的返回值为char*型,当读入成功时会返回输入的字符串指针地址,出错时返回NULL;scanf返回值为int型,返回实际成功赋值的变量个数,当遇到文件结尾标识时返回EOF。
4、gets函数仅用于读入字符串;scanf为格式化输出函数,可以读入任意C语言基础类型的变量值,而不是仅限于字符串(char*)类型。
更多相关内容 -
gets 和 scanf 区别
2021-05-22 07:35:29在C语言中,scanf和gets这两个函数进行输入。gets的输入分割符只有回车,gets是能够读入空格的,但是scanf不能。在 C 语言中,主要用 scanf 和 gets 这两个函数(在 stdio.h 文件中)进行输入。 gets 函数和 scanf ...在C语言中,scanf和gets这两个函数进行输入。gets的输入分割符只有回车,gets是能够读入空格的,但是scanf不能。
在 C 语言中,主要用 scanf 和 gets 这两个函数(在 stdio.h 文件中)进行输入。 gets 函数和 scanf 函数都可以作为字符串的输入函数,相同点都是将从键盘输入的字符串存入数组中,输入完成后要以回车来结束输入。
不同点则是利用 sanf 时,在输入过程中碰到空格时系统认为输入结束,并将空格之前的字符作为有效字符存入数组中,并在尾部追加\0 作为结束标志。利用 gets 时,空格符被看作是有效字符,也就是说只有碰到回车符时系统才认为输入结束。
gets 与 scanf 输入字符串的方式也非常类似,但是有几个区别:
(1) gets 的输入分割符只有回车,因此 gets 是能够读入空格的。如果输入为”hello world”时,上面程序的运行结果是”hello world”。而如果用 scanf 则只能输出 hello
(2) 此外,scanf 和 gets 对待缓冲区里的回车符也是完全不同的。scanf 在读取非空白符之前会忽略回车,读取之后如果遇到回车会停止输入,将其留着缓冲区里;gets 只要一遇到回车就输入结束,并把这个回车从缓冲区里移走。
(3) gets 可以读取空回车,但是 scanf 不能。
gets 从标准输入设备读字符串函数。可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保 buffer 的空间足够大,以便在执行读操作时不发生溢出。
-
Gets和scanf的区别
2018-09-15 15:26:42转载自:Gets和scanf的区别 char s[20]; gets(s); puts(s); gets与scanf输入字符串的方式也非常类似,但是有几个区别: (1) gets的输入分割符只有回车,因此gets是能够读入空格的。如果输入为"hello world"时,...char s[20]; gets(s); puts(s);
gets与scanf输入字符串的方式也非常类似,但是有几个区别:
(1) gets的输入分割符只有回车,因此gets是能够读入空格的。如果输入为"hello world"时,上面程序的运行结果是"hello world"。而如果用scanf则只能输出hello
(2) 此外,scanf和gets对待缓冲区里的回车符也是完全不同的。scanf在读取非空白符之前会忽略回车,读取之后如果遇到空白字符会停止输入,将其留着缓冲区里;gets只要一遇到回车就输入结束,并把这个回车从缓冲区里移走。
(3) gets可以读取空回车,但是scanf不能。
例如输入为"\nhello\n",也就是说,先输入一个空行,然后在第二行输入"hello"并回车。scanf按照它的读取原理,把第一个’\n’作为空白符忽略掉,然后读取字符串"hello",遇到第二个’\n’时输入结束,但是第二个’\n’会被scanf残留在缓冲区里。scanf的输入结果是读入字符串"hello"。当用gets进行读取时,它遇到第一个’\n’,就找到了它的输入分隔符,停止继续输入,第一个’\n’被从缓冲区中读走了,缓冲区里剩下"
gets从标准输入设备读字符串函数。可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。
#include <stdio.h> int main(){ char ch[100] ; gets(ch); for (int i = 0; i < 100; i++) { printf("%d ",ch[i]); } return 0; }
char ch[100] ; scanf("%s",ch); for (int i = 0; i < 100; i++) { printf("%c ",ch[i]); }
scanf("%s",ch);只把11读了进来,并且把空白字符都残留在了缓冲区。
scanf(" %s",ch);可以吧之前残留的空白子字符读走。
getchar可以读走一个残留的空白字符,scanf(" ");可以都走之前最后一个非空白字符后的全部空白字符。
转载自:https://blog.csdn.net/wordwarwordwar/article/details/52579503
功能
编辑
从stdio流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串。
返回值
编辑
读入成功,返回与参数buffer相同的指针;读入过程中遇到EOF(End-of-File)或发生错误,返回NULL指针。所以在遇到返回值为NULL的情况,要用ferror或feof函数检查是发生错误还是遇到EOF。
注意
编辑
本函数可以无限读取,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值。这个事实导致gets函数只适用于玩具程序,为了避免这种情况,我们可以用fgets(stdin) (fgets实际上可以读取标准输入(即大多数情况下的键盘输入),具体参阅fgets词条)来替换gets()。在V7的手册(1979年)中说明:为了向后兼容,gets删除换行符,gets并不将换行符存入缓冲区。
由于可以无限读取,所以在2011年12月,ANSI 采纳了 ISO/IEC 9899:2011 标准,标准中删除了 gets()函数,使用一个新的更安全的函数gets_s()替代(具体用法看下面示例)。
示例
编辑
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h> //这个头文件包含gets()函数,这个函数在ISO/IEC 9899 2011(C11)标准中被移除
int
main(
void
)
{
char
str1[5];
//不要char*p,然后gets(p),这是错误的,因为p没有指向有效的内存,它可能指向任何非法地址 // 地方的未知大小的内存块,这样以来,就可能修改了不属于本程序的内存的内容
gets
(str1);
printf
(
"%s\n"
, str1);
return
0;
}
#include <stdio.h>//gets_s()用法
#define CH 20
int
main(
void
)
{
char
ch[CH];
printf
(
"请输入你的名字:\n"
);
gets_s(ch,CH);
//这里不能用gets_s(ch);
printf
(
"这是你的名字:%s\n"
, ch);
return
0;
}
C++:
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <cstdio>
using
namespace
std;
int
main()
{
char
str[100];
gets
(str);
cout<<str<<endl;
return
0;
}
gets()函数用来从标准输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加'\0'字符。其调用格式为:
gets(s);
gets(s)函数与scanf("%s",s)相似,但不完全相同,使用scanf("%s",s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。
也就是说:gets()函数读取到\n(我们输入的回车)于是停止读取,但是它不会把\n包含到字符串里面去。然而,和它配合使用的puts函数,却在输出字符串的时候自动换行。
说明
编辑
gets(s) 函数中的变量s为一字符串指针。如果为单个字符指针,编译连接不会有错误,但运行后内存溢出错误。
宽字符版本,当使用unicode宽字符文本时,使用这个函数 _getws();
在C11标准中被删除,可用C标准库中的fgets代替.
大数据技术与运用的成熟,应用集中于互联网、金融、医疗、新能源、通信和房地产等行业。整理平均薪资情况和大数据学习大纲供查看
hello\n"。gets的输入结果是一个空串,即一个首字符是’\0’的字符串。
-
gets和scanf有什么区别
2021-05-21 07:15:46gets和scanf都是可以在C语言中用于读取字符串的,但是它们实际上也有很大的不同,本篇文章我们就来看一下gets和scanf之间有什么区别。gets和scanf的区别1、 gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为...gets和scanf都是可以在C语言中用于读取字符串的,但是它们实际上也有很大的不同,本篇文章我们就来看一下gets和scanf之间有什么区别。
gets和scanf的区别
1、 gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。
例如:如果输入为"hello world"时,上面程序的运行结果是"hello world"。而如果用scanf则只能输出hello
2、scanf对末尾回车符的处理:把回车符保留在缓存中。gets对末尾回车符的处理:接收回车,但把回车替换为\0.
3、gets的返回值为char*型,当读入成功时会返回输入的字符串指针地址,出错时返回NULL;scanf返回值为int型,返回实际成功赋值的变量个数,当遇到文件结尾标识时返回EOF。
4、gets函数仅用于读入字符串;scanf为格式化输出函数,可以读入任意C语言基础类型的变量值,而不是仅限于字符串(char*)类型。
-
gets和scanf区别
2020-01-28 21:25:18 -
scanf,getchar和gets的用法和区别
2020-03-18 22:28:20相信很多新手朋友都在scanf,getchar和gets的使用上产生过困惑,尤其是处理字符和字符串时,博主先前就遇到这样的困惑,但一直都是一知半解,今天终于经过一番折腾弄清了它们的用法和区别,下面我们就详细来看看。... -
gets和scanf混用问题
2020-02-25 22:48:211.gets和scanf的区别 gets可以读入字符串空格,遇见回车才停止 scanf遇见空格或回车都停止读入 2. scanf("%d\n",&a); 此时输入数据时需要多输入一行,但只读第一行数据,因为scanf("%d\n",&n);这样一条... -
C语言 scanf()和gets()函数的区别
2021-05-21 06:26:22C语言 scanf()和gets()函数的区别1.相同点:scanf( )函数和gets( )函数都可用于输入字符串2.不同点:两者在功能上有所区别,具体区别如下:要实现如下需求“从控制台输入字符串”有如下两种实现方式:1>使用gets()... -
gets()和getchar()和scanf()的区别
2022-01-21 09:54:46gets() gets函数是输入一行字符串,以回车结束,并且回车键会被过滤掉,不会被读到字符串中。 getchar() getchar()是读取一个字符,包括回车键也会被读成一个字符。 scanf() scanf 的功能是通过键盘给程序中的变量... -
【C语言】gets()和scanf()函数的区别
2021-05-21 14:43:14scanf函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi hello",则应该使用gets函数。gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。... -
C语言gets()与scanf()函数的区别
2018-12-05 20:23:22scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi hello",则应该使用__gets__函数。 gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,... -
C语言 gets() 和scanf()的区别
2020-12-03 18:12:11gets与scanf()最大的区别:gets()输入的字符串中可以有空格,scanf()不能有 gets(字符数组) gets(a); 从终端输入一个字符串到数组a中,可接受回车键之前所有的字符 scanf("%s",字符数组) scanf("%s",a); 从终端输入... -
关于gets和scanf的使用(C语言)
2021-12-20 00:24:46关于gets和scanf的使用(C语言) -
【C】gets和scanf区别
2019-07-10 12:41:093.scanf与gets函数读取字符串的区别 1.scanf() 会忽略行开头的所有空格,并以空格、换行符结束输入; 使用getchar()读取scanf语句执行后,缓冲区留下的换行符, gets读入以任何字符开始的字符串,以换行符结束,... -
C语言中gets(), scanf()区别
2019-02-01 10:47:00C语言中gets(), scanf()区别 相同点: gets()和 scanf() 1、函数都可用于输入字符串 2、都在stdio.h头文件中定义。 3、字符串接受字符结束后自动加'\0' 不同点: 1、gets() 可以接受space,Tab等键盘输入,... -
进击的小白——知识点:scanf与getchar、gets的区别
2019-03-18 16:08:01scanf -
C语言 gets和scanf同时使用产生的问题
2022-05-22 23:00:59之前scanf的时候,会遗留一个’\n’在缓冲区里, 因此,gets()误将这个回车作为了它的输入。 应在gets函数之前使用,fflush(stdin);清空默认缓冲区 (使用stdin,不是自己定义的gets(a)数组的数组a) ... -
gets和scanf输入字符串的区别
2020-07-02 20:36:06gets和scanf输入字符串的区别在于,gets输入字符串遇到空格、制表符都会保留输出,但是scanf不会。 gets测试: #include <stdio.h> #include <string.h> int main() { char s[100]; int c, i; //... -
scanf、getchar和gets的区别
2016-11-27 17:00:27一、scanf函数作用:按照变量在内存的地址将变量值存进去。 一般格式:scanf(格式控制,地址表列) 其中,格式控制: %d:以带符号的十进制形式输出整数 %o:以八进制无符号形式输出整数 %x:以十六进制无符号... -
C语言gets()和scanf()函数的区别
2021-01-21 17:11:56scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串hi hello,则应该使用__gets__函数。 gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能... -
C语言中gets()和scanf()的区别
2020-01-04 16:55:42在C语言中,scanf()函数和gets()函数都可用于输入字符串,但是也有很多区别。 主要区别如下: gets()的输入分隔符只有回车,因此gets能够读入空格。如果使用gets()输入"Hello World",运行之后的结果是"Hello World... -
c语言获取用户输入字符串是scanf和gets的区别详解
2020-08-27 04:22:05今天小编就为大家分享一篇c语言获取用户输入字符串是scanf和gets的区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
C语言中scanf和gets
2022-03-16 14:39:02目录scanf()的说明和使用gets()的说明和使用scanf("%s")和gets()的区别关于~和EOF scanf()的说明和使用 scanf(完成函数为int scanf(const char *format, …))属于库函数<stdio.h>,函数从标准输入流 stdin ... -
fgets、gets和scanf的区别
2015-12-22 16:23:02gets()从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。 注意:... -
C语言 gets()和scanf()函数的区别
2022-03-25 17:56:02C语言 gets()和scanf()函数的区别 scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi hello",则应该使用__gets__函数。 gets可以接收空格;而scanf遇到空格、回车和... -
gets和scanf函数区别
2020-12-21 15:42:51scanf :当遇到回车,空格和tab键会自动在字符串后面添加’\0’,回车,空格和tab键仍会留在输入的缓冲区中。 gets:可接受回车键之前输入的所有字符,并用’\0’替代 ‘\n’.回车键不会留在输入缓冲区中。 # ... -
puts/gets 和 scanf/printf 用法上的区别
2019-02-12 16:22:03gets(s)函数与scanf("%s", &s)相似, 但不完全相同, 使用 scanf("%s", &s)函数输入字符串时存在一个问题, 就是如果输入了空格会认为输入字符串结束,空格后的字符将作为下一个输入项处理, 但gets() 函数将接收输入的... -
gets和scanf()
2019-03-20 11:03:16gets()函数用来从标准输入设备... gets(s)函数与scanf("%s", s)相似, 但不完全相同, 使用scanf("%s", s) 函数输入字符串时存在一个问题, 就是如果输入了空格会认为输入字符串结束, 空格后的字符将作为下一个输入... -
在输入输出字符串时scanf(),printf()和gets(),puts()的区别浅谈
2020-09-05 14:20:00在输入输出字符串时scanf(),printf()和gets(),puts()的区别浅谈,需要的朋友可以参考一下 -
scanf和gets的用法和区别
2017-11-28 10:34:04scanf和gets的用法: 在C语言中,我们主要用scanf和gets这两个函数(在stdio.h文件中)进行输入。 首先来介绍下scanf函数: scanf在C语言中能对各种类型进行输入,同时也能对字符串输入。 格式如下: 输入整型...