我正在研究一个C ++程序,它将字符串作为输入并以某种方式对其进行操作。这是代码:
string input;
cin >> input;
char arg = input[4]; //All inputs always have 5 characters
cout << arg << endl;
输入:添加d
我期待它将d打印到屏幕上,但没有打印任何内容 此外,对于其他输入,我有时会得到奇怪的字符(例如y上有两个点)作为输出。
为什么会发生这种情况?如何纠正?
答案 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);
您将获得所需的结果。