码:

#include <iostream>

#define BUFF 100

using namespace std;

int main(int argc, char* argv[])
{
    char input[BUFF];

    cout << "Input:\n>";

    cin >> input;

    cout << "\n\nOutput:" << input;

    cin >> input;
    cin >> input;
}


当您将输入读入char数组时,它怎么跳过空格呢?哦,还有2个cin(结尾处),因为它的作用有点奇怪,如果在1个cin的情况下输入空格,它就会退出……不知道为什么。

例如

我输入cup cake并输出cup

最佳答案

这基本上是因为operator>>std::cin在空白之间(即\t\n)获取一个“输入对象”,并将其读取到给定的变量/对象中。尝试:

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


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

如果您不读取整个输入,它将停留在输入缓冲区中;这就是为什么在cin >> input的末尾需要两个main()的原因,这使您感到困惑。解释是您将"cup"读入input,但"cake"保留在缓冲区中以备下一次读取。

当读取多个变量时,此行为非常方便,例如:

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


这使您可以写入三个由空格分隔的整数,它们将被读入适当的变量中。如果您需要整行输入,请按照DavidRodríguez的建议尝试并使用std::getline

编辑实际上,在读取std::cin >> input[0] >> input[1]之后,输入缓冲区将仍然为空,因为它包含一个\n字符(按ENTER之后)。要清空输入缓冲区,请尝试:

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

关于c++ - std::cin转换为char数组会跳过空格?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7240843/

10-13 08:27