#include "ellison.h"
int main(int argc, char *argv[])
{
if (argc > 1)
{
int errorOutput = Execute(argc, argv);
switch (errorOutput)
{
case 0:
return EXIT_SUCCESS;
break;
default:
cout << "An error occured: " << ParseError(errorOutput);
return ERROR;
break;
}
}
cout << "+---------------+ \n";
cout << "| ellison 0.1.1 | \n";
cout << "+---------------+ \n\n";
int errorOutput = 0;
string input;
while (true)
{
cout << ">";
input = "";
cin >> input;
if (input == "quit")
{
if (errorOutput != 0)
return ERROR;
else
return EXIT_SUCCESS;
}
errorOutput = Execute(input);
switch (errorOutput)
{
case 0:
break;
default:
cout << "An error occured: " << ParseError(errorOutput);
break;
}
}
}
此代码编译并运行正常。奇怪的是,如果我用一个或多个空格键入一长串字母,我有两个大于标志,而不是一个。我做了某种错误吗? 我将补充说,这不适用于短输入字符串,并且这是使用Visual-C ++ 2012编译的
答案 0 :(得分:0)
std :: cin只读到第一个空格。然后,它不会刷新读取缓冲区。 因此,由于你的“while(true)”,当它到达第二个std :: cin时,它会在不等待新输入的情况下读取输入的第二部分。 您应该尝试使用std :: getline(stream&amp; readingBuffer,std :: string&amp; destination)。它将读取整行,如下:
getline(cin, input);
除非你在使用cin后使用cin.ignore(1),否则不要同时使用cin和getline,因为cin会在流中留下'/ n'。如果您在同一个流上使用getline,它将停在'/ n'处,而不是读取您想要阅读的内容。