码:
#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/