这段代码在获得错误输入时不会阻止 stoi 运行

This snippet of code does not stop stoi from running when it gets bad input

本文关键字:输入 运行 stoi 错误 段代码 代码      更新时间:2023-10-16

我被这段代码困住了。如果用户输入不是数字,我正在尝试让此代码片段重新启动。它似乎没有这样做,我不知道为什么。如果有人能帮我一把,我将不胜感激。对不起开始和结束行缩进,这让我发疯了。

void write() {
string x, y;    
int x1 = 0, y1 = 0, no = 0;
/*highNumber (x1, y1);*/
cout << endl << " x to display: ";
cin >> x;
cout << endl << " y to display: ";
cin >> y;
for (int i = 0; i < x.length(); i++) {
if (x[i] >= '0' || x[i] <= '9') {
no++;
}
}
if (no == x.length()) {
no = 0;
}
else {
write();
}
for (int i = 0; i < x.length(); i++) {
if (y[i] >= '0' || y[i] <= '9') {
no++;
}
}
if (no == x.length()) {
no = 0;
}
else {
write();
}
x1 = stoi(x);
y1 = stoi(y);
highNumber (x1, y1);
}

错误似乎就在这里:if (x[i] >= '0' || x[i] <= '9')如果我正确理解您的代码,这可能应该if (x[i] >= '0' && x[i] <= '9'),即使我在解析它时遇到了一些困难。无论哪种方式,您之前的代码都将为所有字符返回 true。这将检查它是否在 ascii 字符的数量范围内。

另外,似乎您的第二个循环正在检查x.size()而不是在处理yy.size()。如果x的大小与y不同,这应该很重要。