C語言scanf()和gets()及printf()和puts()的區別
阿新 • • 發佈:2018-11-10
http://blog.csdn.net/xingjiarong/article/details/47282817
一、scanf()和gets()
1.scanf()
所在標頭檔案:stdio.h
語法:scanf(“格式控制字串”,變數地址列表);
接受字串時:scanf(“%s”,字元陣列名或指標);
2.gets()
所在標頭檔案:stdio.h
語法:gets(字元陣列名或指標);
兩者在接受字串時:
1.不同點:
scanf不能接受空格、製表符Tab、回車等;
而gets能夠接受空格、製表符Tab和回車等;
scanf :當遇到回車,空格和tab鍵會自動在字串後面新增’\0’,但是回車,空格和tab鍵仍會留在輸入的緩衝區中。
gets:可接受回車鍵之前輸入的所有字元,並用’\0’替代 ‘\n’.回車鍵不會留在輸入緩衝區中
#include<stdio.h>
int main()
{
char a[10];
scanf("%s",a);
printf("%s\n",a);
return 0;
}
從鍵盤輸入字串 asd df時,遇到空格,scanf()就認為輸入結束了,所以a中存放的字串是 ‘asd\0’。
#include<stdio.h> int main() { char a[10]; gets(a); printf("%s\n",a); return 0; }
從鍵盤輸入字串 asd df時,gets()遇到’\n’才認為是結束輸入了,所以a中存放的是’asd df\0’。
#include<stdio.h> int main() { char a[10],b[10]; char c,d; scanf("%s",a); printf("a中儲存的字串為:%s\n",a); c=getchar(); printf("c中儲存的字元為:%c ",c); gets(b); printf("b中儲存的字串為:%s\n",b); d=getchar(); printf("d中儲存的字元為:%c",d); return 0; }
輸入asdf回車,因為scanf會將回車保留在緩衝區中,所以回車會緊接著被c取得而不需要再額外輸入,所以a中儲存的是’asdf\0’,字元c=’\n’。結果如下:
接著輸入as df回車,因為gets會將’\n’替換成’\0’,所以b字串中保留的是’as df\0’,並且還是要繼續輸入d的值:
最後輸入d的值:
二、printf()和puts()的區別
相同點:
兩者都屬於stdio.h這個標頭檔案
都能輸出字串
不同點:
puts()在輸出字串時會將’\0’自動轉換成’\n’進行輸出,也就是說,puts方法輸出完字串後會自動換行。