使用istringstream从stdin读取C ++

时间:2016-04-10 17:12:35

标签: c++ stdin cin eof istringstream

我试图从键盘调用不同的功能,但由于我缺乏cin,istringstream等的知识/经验,我遇到了一些问题。这是我的简化代码:

#include <iostream>
#include <sstream>

using namespace std;

int main(int argc,char **argv) {

    string line;
    do {
        getline(cin,line);
        istringstream iss(line);
        string word;
        iss >> word;
        if (word ==  "function") {
            int id;
            if (!(iss >> id)) {
                cout << "Not integer.Try again" << endl;
                continue;
            }
            cout << id << endl;
            iss >> word;
            cout << word << endl;
        }
        else cout << "No such function found.Try again!" << endl;
    } while (!cin.eof());

    cout << "Program Terminated" << endl;
    return 0;
}

我目前处理的两个问题是:

•为什么在检查我是否得到一个整数时,do-while循环在我输入非整数的东西时终止? (例如“function dw25”) - 继续使用;而不是休息; .Thought break将退出外部if条件。

•如何解决输入“function 25dwa”时出现的问题,因为我不想得到id == 25&amp;字== dwa。

1 个答案:

答案 0 :(得分:1)

我认为您可以使用strtol来检查id是否为整数。

#include <iostream>
#include <sstream>
#include <stdlib.h>

using namespace std;

int main()
{
    string word, value;
    while ((cin >> word >> value)) {
        if (word == "function") {
            char* e;
            int id = (int) strtol(value.c_str(), &e, 10);
            if (*e) {
                cout << "Not integer.Try again" << endl;
                break;
            }
            cout << id << endl;
            if (!(cin >> word))
                break;

            cout << word << endl;
        } else {
            cout << "No such function found.Try again!" << endl;
        }
    }

    cout << "Program Terminated" << endl;
    return 0;
}