std::cin到char数组中跳过空格

std::cin into char array skips spaces?

本文关键字:空格 char cin std 数组      更新时间:2023-10-16

代码:

#include <iostream>
#define BUFF 100
using namespace std;
int main(int argc, char* argv[])
{
    char input[BUFF];
    cout << "Input:n>";
    cin >> input;
    cout << "nnOutput:" << input;
    cin >> input;
    cin >> input;
}

为什么当您将输入读取到char数组中时,它会跳过空格?哦,还有2个cin(在结尾(,因为它的行为有点奇怪,当有1个cin时,如果进入一个空间,它就会退出。。。也不知道为什么。

例如

我输入cup cake,它输出cup

问题是你想读什么?如果你想读取一行,你应该使用getline,如果可能的话,使用std::string的那个会根据需要增长字符串:

#include <iostream>
#include <string>
int main() {
   std::string line;
   std::getline( std::cin, line );
}

这基本上是因为std::cinoperator>>在空白(即ncup cake(之间获取一个"输入对象",并将其读取到给定的变量/对象中。尝试:

std::string input[2];
std::cout << "Input:n>";
std::cin >> input[0] >> input[1];

对于输入input[0] == "cup",您将得到input[1] == "cake"cin >> input

如果您不读取整个输入,它将保留在输入缓冲区中;这就是为什么在"cup"的末尾需要两个main(),这让您感到困惑。解释是将input读取到"cake"中,但std::getline保留在缓冲区中,为下一次读取做好准备。

当读取几个变量时,这种行为非常方便,例如:

int a, b, c;
std::cin >> a >> b >> c;

这允许您编写三个由空格分隔的整数,它们将被读取到适当的变量中。如果您需要整行输入,请按照David Rodríguez的建议尝试并使用std::cin >> input[0] >> input[1]

EDIT实际上,读取n后,输入缓冲区仍不会为空,因为它包含一个CCD_20字符(按ENTER键后(。清空输入缓冲区尝试:

std::cin.clear(); // optional, use when input has gone bad; clears error flags
std::cin.sync(); // empty buffer