atoi()一直返回0

时间:2013-06-12 07:26:26

标签: c++ pointers user-input atoi

在我编写的代码中,我接受一个字符串,检查它是否只包含十进制数字,然后将字符串转换为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;
    }
  }      

2 个答案:

答案 0 :(得分:4)

请注意,使用isdigit(*buffer++)时,您首先调用值为isdigit的{​​{1}},然后将指针递增1。

*buffer

使用此行,您已经在数字后的字符处。

所以你应该在你没有成功时增加,并在你成功时休息。

...正如评论建议的那样,尝试自己做一些调试。您的错误并不是很难调试,即使有一些if (isdigit(*buffer++))并且没有调试器也是如此(尝试在循环中插入cout

答案 1 :(得分:1)

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

std::cin >> numEntries;

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