2013-05-06 97 views
2

我試圖用gets()函數輸入數據,但是每當程序執行到gets留置權時,它都會忽略它。如何在之前的輸入之後使用C++中的「gets」函數?

當我使用gets()沒有以前的數據輸入,它運行正常。但是當我在數據輸入後使用它時,問題就會發生。

這裏就是它以前的數據輸入後使用的代碼(所以在執行我不能輸入數據串):

int main() { 
    char str[255]; 
    int a = 0; 
    cin >> a; 
    if(a == 1) { 
     gets(str); 
     cout << "\n" << str << endl; 
    } 
} 

我怎麼能解決這個問題?

注:同樣的情況與cin.getline

+2

你不使用gets(),永遠!從根本上講,這是不安全的,也是不可能的。另外,不要混合使用C和C++ I/O。現在對於cin.getline,這是一個更有趣的問題,我只是在這裏回答:http://stackoverflow.com/questions/16405630/infile-open-refuses-to-read-the-variable-in-the-file – 2013-05-06 20:04:37

+2

從來沒有,永遠不會使用'gets'。您無法可靠地避免超出緩衝區並造成各種麻煩。至少使用'fgets',但在C++中,你幾乎總是會更好地使用'std :: getline(cin,a_std_string_variable)'。 – cHao 2013-05-06 20:04:43

+0

爲什麼這個問題的標題說C,但標籤說C++? – 2013-05-06 20:06:09

回答

6

cin >>a 

,當你輸入a和進入,也有\n字符由cin離開,因此,當您使用cin.getline()gets(str)它將讀取該換行符。

嘗試以下操作:

cin >>a; 
cin.ignore(); //^^this is necessary 
if(a==1){ 
    gets(str); 
} 

你最好讀取輸入的更好的利用C++方式:

cin >> a; 
cin.ignore(); 
string str; 
if (a == 1) 
{ 
    getline(cin, str); 
} 
+0

ok dat's so helpful,thanx you very much。 – afr0ck 2013-05-06 20:28:06

+0

@ user2355950歡迎您 – taocp 2013-05-06 20:28:37

相關問題