C++ 检查argv[i]是否为有效整数,并在main中传递参数

C++ 检查argv[i]是否为有效整数,并在main中传递参数,c++,function,argv,argc,C++,Function,Argv,Argc,我试图确保传递给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

我试图确保传递给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;
 }
}
#包括
#包括
使用名称空间std;
bool legal_int(char*str);
int main(int argc,char*argv[])
{
//int-total=0;
对于(int i=1;i
bool legal_int(char *str) {
    while (*str)
        if (!isdigit(*str++))
            return false;
    return true;
}
这不是最好的函数,但它应该起到作用。
isdigit
函数需要一个字符来查看,因此传入
*str
。另一个关键点是需要在循环内部推进指针。

如何:

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

这不是最好的函数,但它应该起到作用。
isdigit
函数需要一个字符来查看,因此传入
*str
。另一个关键点是需要在循环内部推进指针。

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

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

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

bool legal_int(char *str)
{
    while (str != 0)
    {
        if (!isdigit(*str)) 
        {
           return false;
        }
        str++;
    }
    return true;
}
你有三个错误:

  • while(str!=0)
    应该是
    while(*str!=0)
    。您希望继续,直到遇到字符串中的零为止,而不是直到字符串本身消失为止

  • if((isdigit(str))
    应该是
    if((isdigit(*str++))
    。你想看看
    str
    指向什么,看看那是不是一个数字,你需要指向下一个数字

  • return true;
    该值不应存在。您不希望仅仅因为找到一个位数就返回

  • 你有三个错误:

  • while(str!=0)
    应该是
    while(*str!=0)
    。您希望继续,直到遇到字符串中的零为止,而不是直到字符串本身消失为止

  • if((isdigit(str))
    应该是
    if((isdigit(*str++))
    。你想看看
    str
    指向什么,看看那是不是一个数字,你需要指向下一个数字

  • return true;
    该值不应存在。您不希望仅仅因为找到一个位数就返回