c语言gets和scanf
❶ 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键会自动在字符串后面添加'