2014-03-27 46 views
1
#include <iostream> 
#include <string> 

int main(void) 
{ 
    using std::cout; 
    using std::cin; 
    using std::string; 

    string name; 
    int n1, n2; 

    cout << "What is your name ?\n"; 
    cin >> name; 
    cout << "Hello " << name.c_str() <<"!\n" 
     << "Please give me two number separated by space\n"; 
    cin >> n1 >> n2; 
    cout << "Sum of " << n1 << " + " << n2 << " is " << n1 + n2 << "\n"; 

    return 0; 
} 

我的控制台输入/输出看起来是这样的:什么是导致有关字符串的这个错误?

你叫什么名字?
John Titor
Hello John!
请给我两个数字之间用空格分隔
0 + 1961462997总和为1961462997

它不打印的全名,只有“约翰”,它甚至不问我puting 2数字。

+6

使用'函数getline()'函数来获取全情投入。 'std :: cin'逐字读取字符串。 –

回答

7

您应该使用std::getline来获取带空格的字符串。 std::cin用空格分隔字符串。

getline(cin, name); 

此外,还可以打印std::string通过std::cout.c_str()

cout << name; 
+0

getline函数真的有用,谢谢。但是,我发现了另一种输入法,如果我这样输入: string name =“John Titor”; 如果我们使用cout,它将打印全名。这种方法与之前的方法有什么区别?因为我认为,这两种方法都会将“John Titor”的价值保存为名称,但为什么打印出的不同呢? – yagamilight1994

+0

@M M,哦等一下,你想说“cin”方法将“John Titor”的价值保存为“John”吗?如果是这样,为什么“输入两个数字”的部分运行不好?或者也许,价值“Titor”将是n1的价值?如果那样的话,为什么它没有问其他的n2值? – yagamilight1994

+0

@ yagamilight1994:是的,正好。并且是的。对于第三个问题,我认为是因为当'cin'无法将字符串放入'int'时,它会停止读取更多内容,并且需要重置该流。所以,只需使用'getline'并避免那些奇怪的行为。 – deepmax

相关问题