0

在我编写的代码中,我接受一个字符串,检查它是否只包含十进制数字,然后将字符串转换为 int。但是,在我的代码中,atoi返回一个 0,而不是作为int. 有人可以告诉我我在哪里搞砸了吗?

while (!sucess || 0 == Entries){
  delete [] bufferptr;
  buffer = nullptr;
  buffer = new char [MAX];
  bufferptr = buffer;

  cin.getline(buffer, MAX, '\n');


  while (*buffer){
    if (isdigit(*buffer++)){
      success = true;
    } else {
      success = false;
      break;
    }
  }
  if (success){
    numEntries = atoi(buffer);
    cout << endl << numEntries << endl;
    }
  }      
4

2 回答 2

4

请记住,isdigit(*buffer++)您首先isdigit使用值调用,*buffer然后将指针加一。

if (isdigit(*buffer++))

使用这一行,您已经位于数字后面的字符处。

因此,当你不成功时,你应该增加,当你成功时,你应该打破。

...正如评论所建议的,尝试自己进行一些调试。你的 bug 并不难调试,即使有一些cout但没有调试器等等(尝试cout << buffer << endl在你的 while 循环中插入一个。

于 2013-06-12T07:28:38.537 回答
1

您可以使用提取运算符将流内容直接解析为int

std::cin >> numEntries;

有关错误检查,请阅读http://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt2

于 2013-06-12T07:35:21.860 回答