CODE:
#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时退出...不知道为什么。
EG
我输入cup cake
,然后输出cup
答案 0 :(得分:2)
问题是你想读什么?如果你想阅读一行,你应该使用getline
,如果可能的话,使用std::string
,因为它会根据需要增长字符串:
#include <iostream>
#include <string>
int main() {
std::string line;
std::getline( std::cin, line );
}
答案 1 :(得分:1)
这基本上是因为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