C++ を使用して単純なコマンド パーサーを作成しています。istream >> を使用して、数字または文字を入力しているかどうかを確認しようとしています。
入力:
a = 10
b = a
パーサー.cpp:
string inputLine, varLeft, equal, varRight;
double varValue
// please see update below
while(getline(cin, inputLine)){
istringstream stringSplitter(inputLine);
stringSplitter >> varLeft >> equal;
if(!(stringSplitter >> varValue)){
stringSplitter >> varRight;
}
}
目標は、コードの後半で、varRight が空の場合、入力行がdouble
リテラルであると想定し、それ以外の場合は変数を表す文字列であると想定します。数字で始まる混合入力に関連する論理エラーがある可能性があることは理解していますが、現時点ではすべての入力が正しくフォーマットされていると想定しています。a
入力の 2 行目の が破棄されるのはなぜですか? どのような修正を提案しますか?
アップデート
問題は while ループ ステートメントではなく、while コード ブロックの最後の if ステートメントにあります。
実際のコードでは、ループは実際には while ループではありません。文字列コマンドを保持するベクトル オブジェクトを使用しており、イテレータを使用してベクトルを通過する for ループを使用してそれらを反復処理しています。しかし、コメント者を喜ばせるために、上記で修正しました。