一、C中(用scanf讀入一個帶空格的字串)

樣例:

#include <stdio.h>
int main(){
    char s[100];
    scanf( "%[^\n]", s ); //注意:連用時一定要加上 getchar() 吸收換行符
    printf( "%s\n", s );
//  printf("%c\n", s[2] );
    return 0;
}

定製自己的掃描集 %[abc]、%[a-z]、%[^abc]、%[^a-z]。[ ]內是匹配的字元,^表示求反集

二、C中(gets函式)

可以無限讀取,以回車結束讀取。 
gets()函式從標準輸入(鍵盤)讀入一行資料,所謂讀取一行,就是遇到換行符就返回。gets()函式並不讀取換行符’\n’,它會吧換行符替換成空字元’\0’,作為c語言字串結束的標誌。 
gets()函式經常和puts()函式配對使用,puts()函式用於顯示字串,並自動在字串後面新增一個換行標誌’\n’ 
但是不推薦使用因為gets(s),(s為一個字串)。gets沒有指明讀取的最大字元數。這裡就會出現一個潛在的問題:gets將不停的往s中儲存內容,而不管是否儲存的下!gets函式不會管s的可用空間有多少。如果輸入的字串過長,會導致緩衝區溢位(buffer overflow),即多餘的字元超出了指定的目標空間。gets()函式就會訪問未被分配的記憶體空間,如果這些記憶體未被使用,不會立即出現問題;如果這片空間已經存有資料,就會擦除掉程式中的其他資料,會導致程式中止。 
在C11標準裡,gets函式已經被正式刪除了。

三、C中(fgets函式)

gets與gets互為兄弟。 
fgets(char buf, int bufsize, FILE stream ):。注意第二個引數bufsize,這個引數就限制了讀取的字元的個數,這就可以解決gets()函式的缺陷。我們知道fgets() 函式主要用於讀取檔案,如果要讀取鍵盤,則stream引數應該為stdin。需要注意的是,如果bufsize設定為n,那麼fgets()函式最多讀取n-1個字元,之所以用“最多”這個詞是因為,如果在之前遇到了換行符”\n”,fgets函式也會返回,讀取工作將會停止,而這個”\n”也會是buf字串中最後一個有效字元(再往後就是字串結束符”\0”了 ),只有在一種情況下,buf不會以”\n”結尾:讀到檔案結束符,並且檔案的最後一個不是以”\n”結尾。還有就是,fgets()函式會讀取換行符(這一點和gets函式不同),當讀取結束後,fgets函式會為buf在末尾新增一個空字元作為字串的結束。 
當一個字元都沒有讀到時,fgets函式返回NULL。

四、C中(fgetc函式)

getc(fin),他會讀取一個開啟的檔案fin,讀取一個字元,然後返回一個int值。為什麼返回的是int而不是char呢?因為如果檔案結束,fgetc將返回一個特殊標記EOF,它並不是一個char。如果把fgetc(fin)的返回值強制轉換為char,將無法把特殊值的EOF和普通字元區分開。如果要從標準輸入讀取一個字元,可以用getchar,它等價於fget(stdin)。 
使用fgetc(fin)可以從開啟的檔案fin中讀取一個字元。一般情況下應當再檢查它不是EOF後再將其轉化成char值,從標準輸入讀取一個字元可以用getchar,他等價於fgetc(stdin)。 
fgetc和getchar將讀取“下一個字元”,因此需要知道在各種情況下,“下一個字元”是哪個。如果用“scanf()”讀取整數,則要是再輸入後多加了一個空格,用getchar讀取到的將是這個空格;如果在輸入之後緊跟著換行,則讀取到的是回車符“\n”。

五、C++中(getline函式)

string類中的getline函式簡單基本用法。

#include <iostream>
#include <string>
using namespace std;
int main()
{
     string a;
     getline(cin,a);
     cout<<a<<endl;
     return 0;
}

string類中的getline函式高階用法。

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string a;
    char s='0';
    getline(cin,a,s);
    cout<<a<<endl;
    return 0;
}

此時,getline函式只會讀取自己定義的字元s之前的字元,讀取到s就停止讀取了。

在char陣列下也可以使用getline()函式簡單用。

#include <iostream>
#include <string>
using namespace std;
int main()
{
     char a[100];
     cin.getline(a,sizeof(a));
     cout<<a<<endl;
     return 0;
}

cin.get()的用法同上。

.