奇怪的字符出现在输入字符串的位置

时间:2017-02-12 13:30:39

标签: c++ string cin

我正在研究一个C ++程序,它将字符串作为输入并以某种方式对其进行操作。这是代码:

string input;
cin >> input;
char arg = input[4]; //All inputs always have 5 characters
cout << arg << endl;

输入:添加d

我期待它将d打印到屏幕上,但没有打印任何内容 此外,对于其他输入,我有时会得到奇怪的字符(例如y上有两个点)作为输出。

为什么会发生这种情况?如何纠正?

3 个答案:

答案 0 :(得分:4)

在输入字符串中,cin >>运算符将字符串带到该空格,然后它将终止。所以在你的字符串中只有add会出现,所以当你试图访问第四个字符并打印时,不会显示任何内容。

尝试,

string input;    
getline(cin, input);    
char arg = input[4];    
cout << arg << endl;

答案 1 :(得分:3)

请注意,cp的{​​{3}}提取在空格处停止,因此install的值为std::string,然后input为UB。< / p>

  

...然后从add读取字符,并将它们附加到char arg = input[4];,就好像是   is,直到满足以下条件之一   真:

     
      
  • ...

  •   
  • str str.append(1, c)std::isspace(c,is.getloc())中的下一个字符true(此空格字符保留在输入流中)。

  •   

您可以使用operator<<来读取包含空格的输入,它将读取字符串直到指定的分隔符;默认值是结束。 e.g。

c

答案 2 :(得分:0)

在您输入(添加d)的示例中,仅考虑空格之前的字符。 所以输入[4]

中有垃圾值

如果要输入空格,请使用双引号。

#include <iostream>
using namespace std;
int main(void)
{
string input;
cin >> input;
char arg = input[4]; //All inputs always have 5 characters
cout << input.length() << endl;
cout << arg << endl;
}

如果传递add d,则字符串长度为3,而不是5。 如果您希望能够输入空格,请替换cin >> input;std::getline(std::cin, input);

您将获得所需的结果。