atoi() 不断返回 0 [关闭]

Posted

技术标签:

【中文标题】atoi() 不断返回 0 [关闭]【英文标题】:atoi() keeps returning a 0 [closed] 【发布时间】:2013-06-12 07:26:26 【问题描述】:

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

【问题讨论】:

做一些调试,好吗? Stack Overflow 不是人工云调试服务。 【参考方案1】:

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

if (isdigit(*buffer++))

通过这一行,您已经在字符 数字之后。

所以你应该在你不成功的时候增加,在你成功的时候打破。

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

【讨论】:

【参考方案2】:

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

std::cin >> numEntries;

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

【讨论】:

以上是关于atoi() 不断返回 0 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

具有多个连接的 mysqli Prepared 语句不断返回 false [关闭]

Atoi 返回值

关闭键盘时,视图在 iPhone X 中不断向下移动

Firebase crashlytics仪表板不断加载[关闭]

Unity Hub不断询问相同的更新,但是在计算机重新启动后降级[关闭]

从 on 函数返回到另一个 javascript [关闭]