当前位置:首页 » 编程语言 » c语言gets和scanf

c语言gets和scanf

发布时间: 2022-08-28 17:15:29

c语言,scanf%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'。

❷ C语言中gets和scanf的区别

gets会将输入回车前所有输入的内容取出来,存放到一个字符数组,包括空格/tab,无论这些内容被空格/tab分成了几段,gets都会将这行输入完完整整的放到数组中,通俗点说就是gets会取一行,读到换行为止。
scanf是格式化输入,如果只使用最简单的格式化字符串%s,那么scanf只会取一个单词,在输入流中遇到空格/tab/换行,就会结束。比如输入流中有"aa
bb
cc"的话,那么执行scanf("%s",
s),s的值就会是aa,再次执行这句话,s的值就是bb,第三次就是cc。scanf会从输入流中取多少怎么取,取决于格式化字符串,也就是scanf的第一个参数;而gets则肯定会取出完整的一行。也就是说在scanf中,换行符等同于空格/tab,但gets中,换行符为读取结束标志。
还有就是gets取出来的肯定是字符串,如果需要转其他类型,则需程序中手动判断;而sacnf就不一定了。

❸ c语言 gets与scanf的顺序

应该是回车造成的问题,正常情况这两个函数不应该混用的。
第一种情况,你在scanf与gets两个函数中间加一个“getchar();”应该就能得到期望的结果了。

❹ c语言中gets函数和是scanf函数有什么区别呢

一、指代不同

1、scanf:是C语言中的一个输入函数。

2、gets:从标准输入设备读字符串函数。

二、读取方式不同

1、scanf:是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。

2、gets:可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。


三、数据流向不同

1、scanf:函数 scanf() 是从标准输入流stdin (标准输入设备,指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。

2、gets:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为‘’空字符,并由此来结束字符串。


❺ C语言中scanf函数与get函数的区别

gets,如果初学的话,可以这么理解,他可以输入空格
而scanf()不能。
比如要输入i
am,然后让他打印出来。那么用
gets()
输出时会是i
am
而用
scanf()
输出时会是i

❻ C语言中scanf()与gets()函数的区别,哪一个可以读入空格啊

1.scanf不能接受空格、制表符Tab、回车等;对末尾回车符的处理:把回车符保留在缓存中。

gets能够接受空格、制表符Tab和回车等;对末尾回车符的处理:接收回车,但把回车替换为。

2.scanf :当遇到回车,空格和tab键会自动在字符串后面添加'',但是回车,空格和tab键仍会留在输入的缓冲区中。

gets:可接受回车键之前输入的所有字符,并用' '替代 ''.回车键不会留在输入缓冲区中

3.gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。scanf()可以读取所有类型的变量。

(6)c语言gets和scanf扩展阅读:

注意问题

(1)在高版本的 Visual Studio 编译器中,scanf 被认为是不安全的,被弃用,应当使用scanf_s代替 scanf。

(2) 对于字符串数组或字符串指针变量,由于数组名可以转换为数组和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&"操作符。

(3) 可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读操作中的最大位数。

(4) scanf函数中没有类似printf的精度控制。

(5) scanf中要求给出变量地址,如给出变量名则会出错

(6) 在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔,则可用空格,TAB或回车作间隔。

(7) 在输入字符数据(%c)时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。

网络-scanf

网络-gets

❼ C语言gets 和 scanf

我忍不住说一下,
希望已经给出答案的同学们不要介意。
scanf("%s%f",
name[i],
&score);
如果你输入
“abc
1234”
(注意
引号不是输入的数据,只是为了方便阅读)
这个时候
name[i]会读取数据的,但是读取的数据遇到空格就视为读取结束。这样剩余下的数据就是
一个空格外加1234.
当score开始读取的时候,读到的第一个数据是一个空格,而不是希望的float类型的数据,因此整个缓冲区的流都乱了,所有的数据全部没有用处。
解决的办法就是在
%s与%f之间加上一个空格,就可以解决这个问题。

❽ c语言 gets scanf

是这样的:你在输入b的值“2”的时候,要结束b的输入,就会用到ENTER键,而这个键对应的值虽然不会被读取,但是它会进入缓存区,然后程序执行到GETS(c)时,缓存区的ENTER值就会被读取,并赋给C,然后你又结束输入,再输入D,于是你运行的结果应该是:
a=1
b=2
c=
d=3
是不是?

热点内容
ios应用上传 发布:2024-09-08 09:39:41 浏览:438
ios储存密码哪里看 发布:2024-09-08 09:30:02 浏览:869
opensslcmake编译 发布:2024-09-08 09:08:48 浏览:653
linux下ntp服务器搭建 发布:2024-09-08 08:26:46 浏览:744
db2新建数据库 发布:2024-09-08 08:10:19 浏览:173
频率计源码 发布:2024-09-08 07:40:26 浏览:780
奥迪a6哪个配置带后排加热 发布:2024-09-08 07:06:32 浏览:101
linux修改apache端口 发布:2024-09-08 07:05:49 浏览:209
有多少个不同的密码子 发布:2024-09-08 07:00:46 浏览:566
linux搭建mysql服务器配置 发布:2024-09-08 06:50:02 浏览:995