2010-08-25 39 views
4

我使用MinGW在Windows上运行g ++编译器。每当我运行下面的代码时,编译器都会给出奇怪的结果。iostream问题

代码:

#include <iostream> 
#include <cstring> 

using namespace std; 

int main() 
{ 
    int n; 
    string a; 
    cin>>n; 
    getline(cin,a); 
    cout<<a; 
    return 0; 
} 

当我编译的代码也没有问题。但只要我运行代码并为n提供输入,它就不会要求输入a和结束。我使用MinGW 5.1.6,是否有任何问题,或者是否有任何问题与我的代码?

回答

4

问题出在您的代码中。简而言之,您输入的提交n的换行符的换行符仍然存储在输入缓冲区中,因为它不是数字输入,因此不会被n消耗。然后getline函数吸收换行符并完成。

+0

我该怎么做才能输入一个数字,并输入一个包含空格的字符串。 – Vaibhav 2010-08-25 18:27:28

+3

@viabhav:一个简单的解决方案可能是摆脱缓冲区中的任何空格:'std :: cin >> n >> std :: ws;'[See this](http://stackoverflow.com/questions/ 1243428/convert-string-to-int-with-bool-fail-in-c/1243435#1243435)以获得更完整的解决方案。 – GManNickG 2010-08-25 18:55:17

+0

非常感谢..你解决了我的grr8问题.. :) – Vaibhav 2010-08-25 19:01:44

3

cin>>n读取数字,但将新行保留在缓冲区中。当您致电getline时,它会将新行字符读取为空行,将其打印出来,然后从main中返回。无论如何,在调用getline之前,您需要将输入缓冲区的其余部分从输入缓冲区中取出。