cin未能获得输入

时间:2013-03-10 21:37:20

标签: c++ cout cin

我希望能够阅读以下内容:

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();会给我最后一个字符,在这种情况下是“}”,但当我输入输入值时输入仍为“{”。

如何确保设置以“}”字符结尾?

5 个答案:

答案 0 :(得分: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;
}

如果读取“}”,它就会突破你的循环。

答案 1 :(得分: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
        }

    }

}

答案 2 :(得分: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;
    }
}

答案 3 :(得分:0)

我读到std :: string并检查它是数字还是“}”符号

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

尽管

使用/写一个词法分析器可能更好

答案 4 :(得分: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 != "}");