C + +输入for循环后跟另一个输入

时间:2018-06-24 21:13:42

标签: c++ for-loop input

在Windows上的c ++ Microsoft Visual Studio。

对编码非常新。目前正在学习Stroupstrup的《编程-使用C ++的原理和实践》,我遇到了一个困难。我要从用户输入中创建一个带有向量名称和向量得分的“得分表”。我使用了for循环来获取输入。现在,我要修改程序,以便用户的第二次输入时,我可以搜索列表并“ cout <<”一个人的分数。问题是程序完全忽略了第二个“ cin >>”命令。  我在网上搜索,找不到这个问题的合理答案。在终止的for循环输入和另一个输入(未循环)之间是否存在任何特殊的交互作用 语法:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    SQLiteDatabase myDatabase=this.openOrCreateDatabase("User",MODE_PRIVATE,null);
    myDatabase.execSQL("CREATE TABLE IF NOT EXISTS user(name VARCHAR,age INTEGER(2),id INTEGER PRIMARY KEY )");
    myDatabase.execSQL("INSERT INTO user(name,age) VALUES('gaurav',20)");
    myDatabase.execSQL("INSERT INTO user(name,age) VALUES('saurav',16)");

    Cursor c=myDatabase.rawQuery("SELECT * FROM user",null);
    int nameIndex=c.getColumnIndex("name");
    int ageIndex=c.getColumnIndex("age");

    while(c.moveToNext()) {
        Log.i("Name",c.getString(nameIndex));
        Log.i("Age", Integer.toString(c.getInt(ageIndex)));
    }
}

1 个答案:

答案 0 :(得分:1)

CTRL-Z被解释为“文件末尾”,因此对该流的任何后续访问将不再读入项目。唯一安全的方法是更改​​程序逻辑,以使名称列表以“ END”而不是CTRL-Z终止。然后您可以以保存方式继续。

通常会逐行读取来自终端的输入,然后进行解析。这使错误处理更加容易。采用这种方法,请参见以下代码:

#include <sstream>

int main() {

    string line;
    map<string,int> scoreboard;
    cout << "enter name score (type END to finish):" << endl;

    while (std::getline(cin, line) && line != "END") {
        stringstream ss(line);
        string name;
        int score;
        if (ss >> name >> score) {
            scoreboard[name] = score;
        } else {
            cout << "invalid input. Type END to finish" << endl;
        }
    }

    cout << "enter name:" << endl;
    string name;
    if (cin >> name) {
        auto item = scoreboard.find(name);
        if (item != scoreboard.end()){
            cout << "score of " << name << ":" << item->second << endl;
        }
        else {
            cout << "no entry for " << name << "." << endl;
        }
    }


}