C++輸入空格字符串的三種解決方法
一.gets和fgets
char * gets ( char * str ); char * fgets ( char * str, int num, FILE * stream );
1. gets 是從第?個(gè)字符開始讀取,?直讀取到 \n 停?,但是不會(huì)讀取 \n ,也就是讀取到的內(nèi)容中沒有包含 \n ,但是會(huì)在讀取到的內(nèi)容后?動(dòng)加上 \0 。
2. fgets 也是從第?個(gè)字符開始讀取,最多讀取 num-1 個(gè)字符,最后?個(gè)位置留給 \0 ,如果num 的?度是遠(yuǎn)?于輸?的字符串?度,就會(huì)?直讀取到 \n 停?,并且會(huì)讀取 \n ,將 \n 作為讀取到內(nèi)容的?部分,同時(shí)在讀取到的內(nèi)容后?動(dòng)加上 \0 。
#include <cstdio>
//?案1
int main()
1
2
3
4{
char arr[10] = {0};
gets(arr);
printf("%s\n", arr);
return 0;
}
//替代?案-?法2
#include <cstdio>
int main()
{
char arr[10] = {0};
fgets(arr, sizeof(arr), stdin);
printf("%s\n", arr);
return 0;
}上述兩個(gè)程序,同樣在運(yùn)?起來后,在控制臺(tái)窗?中輸?: abc def ,按回?,?案1和?案2中arr 數(shù)組的內(nèi)容中差異如下:

二. 還是利用scanf
當(dāng)然C語?中使? scanf 函數(shù)其實(shí)也能做到讀取帶有空格的字符串,只是不常??已。?式就是將 "%s" 改成 "%[^\n]s" ,其中在 % 和 s 之間加上了 [^\n] ,意思是?直讀取,直到遇到\n ,這樣即使遇到空格也就不會(huì)結(jié)束了。
這種?式讀取,不會(huì)將 \n 讀取進(jìn)來,但是在讀取到的字符串末尾加上 \0 。
#include <cstdio>
int main()
{
char arr[10] = "xxxxxxxx";
scanf("%[^\n]s", arr);
printf("%s\n", arr);
return 0;
}三. getchar
使? getchar 逐個(gè)字符的讀取,也是可以讀取?個(gè)字符串的。
#include <cstdio>
int main()
{
char arr[10] = { 0 };
int ch = 0;
int i = 0;
while ((ch = getchar()) != '\n')
{
arr[i++] = ch;
}
printf("%s\n", arr);
return 0;
}到此這篇關(guān)于C++輸入空格字符串的三種解決方法的文章就介紹到這了,更多相關(guān)C++輸入空格字符串內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++多重繼承引發(fā)的重復(fù)調(diào)用問題與解決方法
這篇文章主要介紹了C++多重繼承引發(fā)的重復(fù)調(diào)用問題與解決方法,結(jié)合具體實(shí)例形式分析了C++多重調(diào)用中的重復(fù)調(diào)用問題及相應(yīng)的解決方法,需要的朋友可以參考下2018-05-05
C/C++通過IP獲取局域網(wǎng)網(wǎng)卡MAC地址
這篇文章主要為大家詳細(xì)介紹了C++如何通過Win32API函數(shù)SendARP從IP地址獲取局域網(wǎng)內(nèi)網(wǎng)卡的MAC地址,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-02-02
基于c++ ege圖形庫實(shí)現(xiàn)五子棋游戲
這篇文章主要為大家詳細(xì)介紹了基于c++ ege圖形庫實(shí)現(xiàn)五子棋游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
C++高并發(fā)內(nèi)存池的實(shí)現(xiàn)
本文主要介紹了C++高并發(fā)內(nèi)存池的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07

