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

时间:2017-08-23 14:37:20

标签: c++

我被这段代码困住了。我试图让这个代码片段重新启动,如果用户输入不是数字。它似乎没有这样做,我不知道为什么。如果有人能帮助我,我将不胜感激。抱歉开始和结束行缩进,这让我很生气。

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);
}

1 个答案:

答案 0 :(得分:0)

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

此外,在处理x.size()时,您的第二个循环似乎正在检查y.size()而不是y。如果xy的尺寸不同,这一点很重要。