1

我试图确保传递给 main 的所有参数都是有效的整数,如果不是,我会打印一个错误。例如,如果我有一个名为 total 的可执行文件,我会输入total 1 2 3 4. 如果有一个无效的整数,我想打印一个错误,所以如果我输入total 1 2 3zy它会打印一个错误消息。我的代码如下。

#include <iostream>
#include<stdlib.h>
using namespace std;

bool legal_int(char *str);

int main(int argc, char *argv[])
{
 //int total = 0;
 for(int i = 1; i < argc; i++)
 {
  if( (legal_int(argv[i]) == true) )
  {
   cout << "Good to go" << endl;
  }
  else
  {
   cerr << "Error: illegal integer." << endl;
   return 1;
  }
 }

  // int value = atoi(argv[i]);
  //cout << value << endl;
}

bool legal_int(char *str)
{
 while(str != 0) // need to
 if( (isdigit(str)) )// do something here
 {
  return true;
 }
 else
 {
  return false;
 }
}

我需要知道的是如何索引字符串中的所有字符并确保它们是legal_int函数的数字?

4

3 回答 3

3

在比较每个字符时,逻辑应该是如果它不合法,则返回 false,否则继续:

bool legal_int(char *str)
{
    while (str != 0)
    {
        if (!isdigit(*str)) 
        {
           return false;
        }
        str++;
    }
    return true;
}
于 2013-10-15T02:06:24.603 回答
1

关于什么:

bool legal_int(char *str) {
    while (*str)
        if (!isdigit(*str++))
            return false;
    return true;
}

它不是最好的功能,但它应该服务于目的。该isdigit函数需要一个字符来查看所以传入*str。另一个关键点是您需要在循环内推进指针。

于 2013-10-15T02:05:11.333 回答
0
bool legal_int(char *str)
{
 while(str != 0) // need to
 if( (isdigit(str)) )// do something here
 {
  return true;
 }
 else
 {
  return false;
 }
}

你犯了三个错误:

  1. while (str != 0)应该是while (*str != 0)。您想继续直到在字符串中遇到零,而不是直到字符串本身消失。

  2. if( (isdigit(str)) )应该是if( (isdigit(*str++)) )。您想查看str指向的内容,看看它是否是一个数字,您需要指向下一个数字。

  3. return true;那不应该在那里。您不想仅仅因为找到一个数字而返回。

于 2013-10-15T02:06:29.300 回答