1

以下が読めるようになりたいです。

myvar = { 1 2 3 5 }

だから私がやったことは

string input;
int intInput;

cin >> input; //take in the varname, do stuff
cin >> input; // check to make sure it's "="
if (input != "=") {
    //stuff
}

cin >> input; //check to make sure it's "{"
if (input != "{") {
    //stuff
}

while (cin >> intInput) {
   //stuff
   cout << intInput << endl;
}

この時点で、「}」文字が intInput に格納され、while ループが終了したと理解しています。「}」で終わるようにしたい。

c.unget();
cin >> input;
if (input != "}") {
    //stuff
} 

c.unget(); だと思いました。この場合は「}」ですが、入力の値を計算すると、入力は「{」のままです。

セットが「}」文字で終了していることを確認するにはどうすればよいですか?

4

5 に答える 5

2

入力をcoutすると、ここで読み取った最後の文字列であるため、「{」が表示されます。

cin >> input; //check to make sure it's "{"

次に、数字をintInputに入れます。代わりに、文字列を使用して入力を常に読み取り、「}」と等しくない場合は整数に変換することができます。

#include <cstdlib>
while (cin >> input) {
    if(input == "}")
        break;
    else
       intInput = atoi(input.c_str()); //or whatever means you prefer to convert a string to int
    cout << intInput << endl;
}

「}」が読み取られると、ループから抜け出します。

于 2013-03-10T21:53:38.373 に答える
1
#include <iostream>
#include <sstream>
using namespace std;
int main() {
    string name, buf;
    cin >> name;
    cin >> buf; // =
    cin >> buf; // {
    while(1) {
        if(cin >> buf) {
            if(buf == "}") break;
            stringstream ss(buf);
            int i;
            ss >> i;
            if(ss.fail()) {
                cout << "fail" << endl;
                            //conversion error
            } else {
                cout << i << endl;
            }
        } else {
            cout << "no }" << endl;
                    break;
            //only if cin is reading from file, or wating for CTRL+D from terminal emulator
        }

    }

}
于 2013-03-10T21:56:17.573 に答える
1

これをチェックしてください:

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
    int i;
    string input;
    while (cin >> input)
    {
        if (input == "}")
            break;
        else
            stringstream(input) >> i;

        cout << i << endl;
    }
}
于 2013-03-10T21:57:23.743 に答える
0

std :: stringを読んで、それが数字または「}」記号であることを確認します

while (cin >> stringInput) {
    if (stringInput = "}") {
        break;
    }
    if (sscanf(stringInput.c_str(), "%d", &intInput) == 0) {
         //stuff
    }
}

ただし、レクサーを使用/作成する方がよい場合があります

于 2013-03-10T21:53:47.930 に答える
0

バッファには、ユーザーが入力した文字が数値でない場合でも含まれます。失敗フラグを設定するだけです。次に、文字列として再度読み取ります。

string input;
int intInput;

cin >> input; //take in the varname, do stuff
cin >> input; // check to make sure it's "="
if (input != "=") {
    //stuff
}

cin >> input; //check to make sure it's "{"
if (input != "{") {
    //stuff
}

do {
   cin >> int;
   if (!cin) {
       cin.clear();    // clear error flags
       cin >> input;   // read again as string
       if (input != "}") {
           // handle error
       }
   }
   else
       cout << intInput << endl;
} while (input != "}");
于 2013-03-10T22:06:55.307 に答える