我有一个简单的表单,输入类型为int。当我输入带有字符的输入birthYear
和currentYear
时,结果为0,程序在输入被填充之前结束。
char name[100], birthplace[100];
int birthYear, currentYear, age;
cout << "Name : ";
cin.getline(name, 100);
cout << "Birtyear : ";
cin >> birthYear;
cin.ignore();
cout << "Current Year : ";
cin >> currentYear;
cin.ignore();
cout << "Birthplace : ";
cin.getline(birthplace, 100);
age = currentYear - birthYear;
cout << "=================" << endl;
cout << "NAME : " << name << endl;
cout << "AGE : " << age << endl;
cout << "BIRTHPLACE : " << birthplace << endl;
我无法将birthYear
和currentYear
的数据类型更改为string,因为它将被计算。
我试着将birthYear
和currentYear
的数据类型转换为char,然后将其转换为int,但当我输入超过1个字符时,程序无法正常运行。
我所期望的是,当我输入字符,然后变量将设置默认值或程序显示错误消息。
2条答案
按热度按时间v8wbuo2f1#
当从输入流中提取整数时,如果输入无法转换为整数,
operator>>
会将输入流置于错误状态。您需要检查并清除此状态,然后才能继续从流中阅读。例如:3ks5zfa02#
我会使用
std::from_chars
(C++17起)读取字符串并将其转换为数字:std::from_chars
允许您检查从string到int的转换是否有任何错误(参见下面示例中的返回值ec
),包括额外字符(参见返回值ptr
,指向输入字符串中与int不匹配的第一个字符)。std::string
而不是char[100]
来阅读输入字符串。std::getline
和cin >>
。Demo(https://godbolt.org/z/Erhqxq8Tz)