在輸入輸出字符串時(shí)scanf(),printf()和gets(),puts()的區(qū)別淺談
1.scanf("%s",str)和gets(str)
scanf("%s",str)和gets(str)均可用于輸入字符串到字符數(shù)組變量str,但scanf("%s",str)只讀到輸入字符的空格或回車處,而gets(str)讀到回車處結(jié)束,所以當(dāng)句子中單詞由空格分開時(shí)要用后者來(lái)輸入,如下圖所示:
需要強(qiáng)調(diào)一點(diǎn),scanf("%s",str)在遇到'\n'(回車)或' '(空格)時(shí)輸入結(jié)束,但'\n'(回車)或' '(空格)停留在出入緩沖區(qū),如處理不慎會(huì)影響下面的輸入;gets(str)遇到'\n'(回車)時(shí)輸入結(jié)束,但'\n'(回車)已被替換為'\0',存儲(chǔ)于字符串中,輸入緩沖中沒有遺留的'\n'(回車),不會(huì)影響后續(xù)的輸入。測(cè)試程序的代碼為:
View Code
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
//freopen("http://home//jack//jack.txt","r",stdin);
char str[80];
char ch;
cout<<"1、請(qǐng)輸入一個(gè)沒有空格的字符串:"<<endl;
scanf("%s",str);
cout<<"用scanf(\"%s\",str)輸入的字符串為:"<<str<<endl;
cout<<"再輸入一次作為對(duì)比:"<<endl;
while((ch=getchar())!='\n'&&ch!=EOF);
gets(str);
cout<<"用gets(str)輸入的字符串為:"<<str<<endl;
cout<<"2、請(qǐng)輸入一個(gè)有空格的字符串:"<<endl;
scanf("%s",str);
cout<<"用scanf(\"%s\",str)輸入的字符串為:"<<str<<endl;
cout<<"再輸入一次作為對(duì)比:"<<endl;
while((ch=getchar())!='\n'&&ch!=EOF);
gets(str);
cout<<"用gets(str)輸入的字符串為:"<<str<<endl;
return 0;
}
其中while((ch=getchar())!='\n'&&ch!=EOF);是處理輸入緩存中的遺留的辦法;fflush(stdin)方法對(duì)某些編譯器不適用,不是標(biāo)準(zhǔn)C支持的函數(shù)。
2、printf(“%s”,str)和puts(str)
先看如下代碼:
View Code
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
//freopen("http://home//jack//jack.txt","r",stdin);
char str1[80]="hello";
cout<<"用printf(\"%s\",str1)輸出的字符串為:";
printf("%s",str1);
cout<<"用puts(str1)輸出的字符串為: ";
puts(str1);
char str2[80]="hello world";
cout<<"用printf(\"%s\",str2)輸出的字符串為: ";
printf("%s",str2);
cout<<"用puts(str2)輸出的字符串為: ";
puts(str2);
return 0;
}
從運(yùn)行結(jié)果可以看出,printf(“%s”,str)和puts(str)均是輸出到'\0'結(jié)束,遇到空格不停,但puts(str)會(huì)在結(jié)尾輸出'\n',printf(“%s”,str)不會(huì)換行。printf(“%s\n”,str)可以替換puts(str)。
完。
- 淺析C語(yǔ)言中printf(),sprintf(),scanf(),sscanf()的用法和區(qū)別
- 詳解C語(yǔ)言sscanf()函數(shù)、vsscanf()函數(shù)、vscanf()函數(shù)
- C語(yǔ)言中sscanf()函數(shù)的字符串格式化用法
- C語(yǔ)言中的sscanf()函數(shù)使用詳解
- C語(yǔ)言中的fscanf()函數(shù)與vfscanf()函數(shù)使用
- C語(yǔ)言的getc()函數(shù)和gets()函數(shù)的使用對(duì)比
- 基于C++ cin、cin.get()、cin.getline()、getline()、gets()函數(shù)的使用詳解
- 詳解C語(yǔ)言gets()函數(shù)與它的替代者fgets()函數(shù)
- C語(yǔ)言中輸入函數(shù)(scanf()、fgets()和gets())的區(qū)別詳解
相關(guān)文章
C語(yǔ)言中scanf函數(shù)的原樣輸入的坑及解決
這篇文章主要介紹了C語(yǔ)言中scanf函數(shù)的原樣輸入的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07Visual Studio Code配置C、C++環(huán)境并編寫運(yùn)行的方法
這篇文章主要介紹了Visual Studio Code配置C、C++環(huán)境并編寫運(yùn)行的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08C 語(yǔ)言基礎(chǔ)教程(我的C之旅開始了)[八]
C 語(yǔ)言基礎(chǔ)教程(我的C之旅開始了)[八]...2007-02-02C++萬(wàn)能庫(kù)頭文件在vs中的安裝步驟(圖文)
這篇文章主要介紹了C++萬(wàn)能庫(kù)頭文件在vs中的安裝步驟(圖文),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02詳解C語(yǔ)言中sizeof如何在自定義函數(shù)中正常工作
在main函數(shù)中,sizeof是可以正常工作的,但是在自定義函數(shù)中就不可以了。所以本文將為大家詳細(xì)講解一下如何解決這一問題,感興趣的可以了解一下2022-05-05