在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)));
}
}
答案 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;
}
}
}