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

來源:互聯網
上載者:User

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和斷行符號等;

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()可以讀取所有類型的變數


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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.