2014-05-09 117 views
0

我试图得到一个字符串作为输入与cin它的工作,但是当我试图得到一个int作为输入紧接在字符串控制台不会请求它并且程序关闭。这里是我的代码:std :: cin不接受输入,程序立即关闭

#include <iostream> 
#include <string> 
using namespace std; 

void main(void) 
{ 
string a, b; 
int c, d, e; 

cout << "Enter two words \n"; 
cin >> a, b; 
cout << "Enter three int"; 
cin >> c, d, e; 
cout << c*d; 
} 

此代码不会让我进入第二输入,但我可以看到第二个输出的程序关闭之前。

回答

5

你的代码是错误的:

cin >> a, b; 

不会给你你所期望的。在你需要从cin读取字符串,请使用:

cin >> a; 
cin >> b; 

这同样适用于其他类型。

还要注意的是:

void main(void) 

是不正确的。 main必须返回int:与

int main(void) 
{ 
    return 0; 
} 
+0

好吧谢谢你的作品!老师说我们应该用void main(void),不知道为什么。 – Vermz

+1

当流操作符返回对自己的引用时,您也可以执行'cin >> a >> b'。 – 0x499602D2

3

这是错误的:

cin >> a, b; 

它应该是:

cin >> a >> b; 

同样:

cin >> c, d, e; 

应该是:

cin >> c >> d >> e; 

确保将来启用编译器警告 - 这样编译器可以为您指出许多这样的简单错误。当我编译你的原代码启用了警告我得到:

$ g++ -Wall junk.cpp 
junk.cpp:5:1: error: 'main' must return 'int' 
void main(void) 
^~~~ 
int 
junk.cpp:13:11: warning: expression result unused [-Wunused-value] 
cin >> c, d, e; 
     ^
junk.cpp:11:11: warning: expression result unused [-Wunused-value] 
cin >> a, b; 
     ^
junk.cpp:13:14: warning: expression result unused [-Wunused-value] 
cin >> c, d, e; 
      ^
3 warnings and 1 error generated. 

从这可以很容易地看到,有一些错误与两个cin线,而且你还需要的main返回类型更改为int

+0

谢谢!有效! – Vermz

+0

太好了 - 确保你打开这些警告(并注意它们!)。 –

1

尝试:

int main(void) 
{ 
string a, b; 
int c, d, e; 

cout << "Enter two words \n"; 
cin >> a >> b; 
cout << "Enter three int"; 
cin >> c >> d >> e; 
cout << c*d; 
} 
4

线cin >> a, b;使用逗号运算符从左至右演算值为不同的表情。其结果是一样的下面的代码:

cin >> a; 
b; 

当达到行cin >> c, d, e;,它同样evaluted为:

cin >> c; 
d; 
e; 

的结果是,当第二cin >> ...语句evaluted第二您输入的字仍然在输入缓冲区中完成,而不需要等待来自用户的更多输入。