我无法跳过某些输入。
int main(){
string input;
string lastName;
string firstName;
int age;
int streetNum;
string streetName;
string town;
string zipCode;
float balance;
稍后
Update(lastName, firstName, age, streetNum, streetName, town, zipCode, balance);
}
想法是,如果用户什么都不输入(只是按回车键),值应该保持不变并移动到下一个输入。
void Update(string &lastname, string &firstname, int &age, int &streetnum, string &streetname, string &town, string &zipcode, float &balance){
cout << "Update the following, enter nothing to leave the same: " << endl;
string input;
size_t sz;
cout << "Last name: ";
cin >> input;
if (!input.empty()) { lastname = input; }
cout << "First name: ";
cin >> input;
if (!input.empty()) { firstname = input; }
cout << "Age: ";
cin >> input;
if (!input.empty()) { age = stoi(input, &sz); }
cout << "Street number: ";
cin >> input;
if (!input.empty()) { streetnum = stoi(input, &sz); }
cout << "Street name: ";
cin >> input;
if (!input.empty()) { streetname = stoi(input); }
cout << "Town name:";
cin >> input;
if (!input.empty()) { town = input; }
cout << "ZipCode: ";
cin >> input;
if (!input.empty()) { zipcode = input; }
cout << "Balance: ";
cin >> input;
if (!input.empty()) { balance = stof(input); }
}
如果用户只按回车,我所有的尝试都无法跳过输入。
最佳答案
cin
的问题是:
- 它ignores the blanks , 换行符 (enter) 为空白
- 它使用空格作为值的分隔符,因此“Baker street”将被解读为两个字符串,第二个字符串代表城镇。
考虑使用 getline()
转换为字符串(最终转换为 stringstream 以进一步解析收到的结果):
getline (cin, input); // instead of cin>>input;
顺便说一下,streetname 不是整数,对吧? ;-)
关于C++ 存储 cin 输入并跳过其他输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25818289/