2013-05-06 19 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

相关问题