C++輸入空格字符串的三種解決方法
一.gets和fgets
char * gets ( char * str ); char * fgets ( char * str, int num, FILE * stream );
1. gets 是從第?個字符開始讀取,?直讀取到 \n 停?,但是不會讀取 \n ,也就是讀取到的內(nèi)容中沒有包含 \n ,但是會在讀取到的內(nèi)容后?動加上 \0 。
2. fgets 也是從第?個字符開始讀取,最多讀取 num-1 個字符,最后?個位置留給 \0 ,如果num 的?度是遠?于輸?的字符串?度,就會?直讀取到 \n 停?,并且會讀取 \n ,將 \n 作為讀取到內(nèi)容的?部分,同時在讀取到的內(nèi)容后?動加上 \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; }
上述兩個程序,同樣在運?起來后,在控制臺窗?中輸?: abc def ,按回?,?案1和?案2中arr 數(shù)組的內(nèi)容中差異如下:
二. 還是利用scanf
當然C語?中使? scanf 函數(shù)其實也能做到讀取帶有空格的字符串,只是不常??已。?式就是將 "%s" 改成 "%[^\n]s" ,其中在 % 和 s 之間加上了 [^\n] ,意思是?直讀取,直到遇到\n ,這樣即使遇到空格也就不會結束了。
這種?式讀取,不會將 \n 讀取進來,但是在讀取到的字符串末尾加上 \0 。
#include <cstdio> int main() { char arr[10] = "xxxxxxxx"; scanf("%[^\n]s", arr); printf("%s\n", arr); return 0; }
三. getchar
使? getchar 逐個字符的讀取,也是可以讀取?個字符串的。
#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; }
到此這篇關于C++輸入空格字符串的三種解決方法的文章就介紹到這了,更多相關C++輸入空格字符串內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Linux環(huán)境下段錯誤的產(chǎn)生原因及調(diào)試方法小結
借此機會系統(tǒng)學習了一下,這里對Linux環(huán)境下的段錯誤做個小結,方便以后同類問題的排查與解決2011-11-11