2012-01-27 42 views
0
#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

std :: cin只读直到第一个空格。然后,它不刷新读取缓冲区。 因此,由于您的“while(true)”,当它到达第二个std :: cin时,它将读取输入的第二部分,而不用等待新的输入。 您应该试试std :: getline(stream & readingBuffer,std :: string & destination)。它会读取整条生产线,像这样的:

getline(cin, input); 

只是不,除非你使用cin.ignore(1)使用CIN后使用cin和函数getline在同一时间,因为CIN留下“/ N”在流中。如果您在同一个流中使用getline,它将停止在'/ n'处,而不是读取您想要读取的内容。

+0

谢谢。那是我需要的。 – Andonuts 2012-01-27 06:01:13

相关问题