你好我是C ++的新手,也许是编程中的一个大菜鸟。无论如何我遇到了一个错误,其中isdigit似乎没有将char转换为int。香港专业教育学院一直在使用argv的命令行参数,这是一个char,想要检查输入的是1到35之间的数字,因为我要使用输入的数字作为int并使用它来决定有多少个圆球到在SFML程序中生成即时生成。
#include <ctype.h>
using namespace std;
int main(int argc, char *argv[])
{
if (argc > 2 || argc < 1)
{
cout << "Invalid Command!" << endl;
}
if (argc == 1)
{
cout << "Please input X number of circles from 1 to 35." << endl;
}
if (argc == 2)
{
if (isdigit(argv[1]))
{
int X = atoi(argv[1]);
if (X >= 1 && X <= 35)
{
//do stuff
}
else
{
cout << "Please input X number of circles from 1 to 35." << endl;
}
}
}
}
说明错误的内容:
error C2664: 'int isdigit(int)' : cannot convert argument 1 from 'char *' to 'int'
答案 0 :(得分:0)
如果要检查argv[1]
(字符串)中的每个字符是否为数字,您可以执行以下操作:
bool isDigit = true;
for (int i = 0; argv[1][i]; i++)
{
if (!isdigit(argv[1][i]))
{
isDigit = false;
break;
}
}
if (isDigit)
{
int X = atoi(argv[1]);
if (X >= 1 && X <= 35)
{
//do stuff
}
else
{
cout << "Please input X number of circles from 1 to 35." << endl;
}
}
答案 1 :(得分:0)
问题是您尝试在isdigit()
上拨打char *
,而期望char
。
将isdigit(argv[1])
更改为isdigit(argv[1][0])
以检查第二个参数中的第一个字符是否为字符。但是,请注意,这只会检查第一个字符。如果您想支持两位数的数字,请同时检查isdigit(argv[1][1])
。
更好的解决方案
由于您使用的是CPP,因此您可以&amp;应该使用istringstreams进行转换,如下所示:
int i;
std::istringstream ss(argv[1]);
ss >> i;
if (!ss.good()) {
// Input was not a number...
} else if (i >= 1 && i <= 35) {
// Use i...
} else {
// I not in range...
}