我正在尝试确保传递给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
函数的数字?
答案 0 :(得分:3)
比较每个字符时,逻辑应该是不合法,返回false,否则继续:
bool legal_int(char *str)
{
while (str != 0)
{
if (!isdigit(*str))
{
return false;
}
str++;
}
return true;
}
答案 1 :(得分:1)
怎么样:
bool legal_int(char *str) {
while (*str)
if (!isdigit(*str++))
return false;
return true;
}
这不是最好的功能,但应该达到目的。 isdigit
函数需要一个字符来查看,因此传递*str
。另一个关键点是你需要在循环内部推进指针。
答案 2 :(得分:0)
bool legal_int(char *str)
{
while(str != 0) // need to
if( (isdigit(str)) )// do something here
{
return true;
}
else
{
return false;
}
}
你有三个错误:
while (str != 0)
应为while (*str != 0)
。你想继续,直到你在字符串中遇到零,直到字符串本身消失为止。
if( (isdigit(str)) )
应为if( (isdigit(*str++)) )
。您想查看str
指向的内容并查看该数字是否为数字,您需要指向下一个数字。
return true;
那不应该存在。你不想因为找到一个数字而返回。