C語言 gets()和scanf()函數的區別


scanf( )函數和gets( )函數都可用於輸入字符串,但在功能上有區別。若想從鍵盤上輸入字符串"hi hello",則應該使用 gets 函數。

gets可以接收空格;而scanf遇到空格、回車和Tab鍵都會認為輸入結束,所有它不能接收空格。

char string[15]; gets(string); /*遇到回車認為輸入結束*/

scanf("%s",string); /*遇到空格認為輸入結束*/

所以在輸入的字符串中包含空格時,應該使用gets輸入。

scanf和gets獲取字符串時的區別

在C語言中,能構獲取字符串的函數至少有兩個:

1.scanf()

所在頭文件:stdio.h

語法:scanf("格式控制字符串",變量地址列表);

接受字符串時:scanf("%s",字符數組名或指針);

2.gets()

所在頭文件:stdio.h

語法:gets(字符數組名或指針);

兩者在接受字符串時:

1.不同點:

scanf不能接受空格、制表符Tab、回車等;對末尾回車符的處理:把回車符保留在緩存中。

而gets能夠接受空格、制表符Tab和回車等;對末尾回車符的處理:接收回車,但把回車替換為\0.

2.相同點:

字符串接受結束后自動加'\0'。

例1:

#include <stdio.h>

main()

{

char ch1[10],ch2[10];

scanf("%s",ch1);

gets(ch2);

}

依次鍵入asd空格fg回車,asd空格fg回車,則ch1="asd\0",ch2="asd fg\0"。

例2:

#include <stdio.h>

main()

{

char ch1[10],ch2[10],c1,c2;

scanf("%s",ch1);

c1=getchar();

gets(ch2);

c2=getchar();

}

依次鍵入asdfg回車,asdfg回車,則ch1="asdfg\0",c1='\n',ch2="asdfg\0",c2需輸入。

scanf :當遇到回車,空格和tab鍵會自動在字符串后面添加'\0',但是回車,空格和tab鍵仍會留在輸入的緩沖區中。

gets:可接受回車鍵之前輸入的所有字符,並用'\n'替代 '\0'.回車鍵不會留在輸入緩沖區中

gets()用到讀取字符串,用回車結束輸入

scanf()可以讀取所有類型的變量

 

案例:

    第一段:
scanf("%lf",&f);getchar(); gets(a); gets(b); 第二段: scanf("%lf",&f); scanf("%s",a); scanf("%s",b);

假如第一段不加getchar,那么即便是在正確輸入的情況下,輸入結果也是不正確的。

所以,scanf函數遇到空白符則認為輸入結束。gets遇到回車才結束輸入。
scanf函數會把回車符放在緩沖區,gets則會把回車符換成\0 .

 

 

(轉載自:http://leoenglish.blog.163.com/blog/static/1750319852011296336486/)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM