C語言scanf()和gets()及printf()和puts()的區別
一、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;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
從鍵盤輸入字符串 asd df時,遇到空格,scanf()就認爲輸入結束了,所以a中存放的字符串是 ‘asd\0’。
#include<stdio.h>
int main()
{
char a[10];
gets(a);
printf("%s\n",a);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
從鍵盤輸入字符串 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;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
輸入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方法輸出完字符串後會自動換行。
這一組比較簡單,就不再舉例子了。