2012-01-27 14 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; 
     } 
    } 
} 

このコードはコンパイルされて正常に動作します。奇妙な部分は、1つ以上のスペースを持つ長い文字列を入力すると、1つではなく2つ以上の記号があることです。私が作った何らかのエラーがありますか? これは短い入力文字列では機能しないこと、Visual C++ 2012でコンパイルされたことを追加します。コマンドラインアプリケーションの入力に問題がある

答えて

0

std :: cinは最初のスペースまでしか読み込みません。次に、読み取りバッファをフラッシュしません。 "while(true)"のため、2番目のstd :: cinに到達すると、新しい入力を待たずに入力の2番目の部分が読み込まれます。 代わりにstd :: getline(ストリーム& readingBuffer、std :: string &宛先)を試してください。 CINは「/ N」を残しているため、あなたはcin.ignoreを使用しない限り

getline(cin, input); 

ジャスト(1)CINを使用した後、同時にCINとのgetlineを使用していない:それは、このようなように、行全体を読み込みますストリームの中で。同じストリーム上でgetlineの直後を使うと、それは '/ n'で止まり、読んでいたものを読んでいません。

+0

ありがとうございました。それが私の必要なものでした。 – Andonuts

関連する問題