argv[] 中的 Int 参数
Int parameter in argv[]
所以基本上我把这个项目带到了学校,我们需要将 int
参数传递给 argv[]
。该项目在 C 中。
我们不能使用 string.h
我试图将 argv[]
重新键入 int
,但由于它只是一个指针,所以没有用。
这是我的代码:
if(argv[1][0] == '1'){
printf("Hodnota LEVEL je 1");
}
else if(argv[1][0] == '2'){
printf("Hodnota LEVEL je 2");
}
如您所见,我目前正在检查 argv[]
是否等于字符“1”或“2”,这不是我想要的。
我唯一想到的是用一些字符变量替换'1'和'2',然后将其重铸为int
。完成此过程后,我可以检查它是 int
1 还是 int
2
还有其他方法可以解决我的问题吗?
如果你不允许使用标准库,那么你可以这样做:
int val = 0;
for ( char *p = argv[1]; *p != 0; p++ )
{
val *= 10;
val += *p - '0’;
}
十进制数字的字符编码保证是连续的,因此减去 '0'
的编码会得到等效的整数值 - 例如,'1' - '0' == 1
、'2' - '0' == 2
等。
您可能想要添加某种验证 - 如果 argv[1] == "abcd"
,您将得到一个有趣的结果。
如果您被允许使用标准库,请改用strtol
。
所以基本上我把这个项目带到了学校,我们需要将 int
参数传递给 argv[]
。该项目在 C 中。
我们不能使用 string.h
我试图将 argv[]
重新键入 int
,但由于它只是一个指针,所以没有用。
这是我的代码:
if(argv[1][0] == '1'){
printf("Hodnota LEVEL je 1");
}
else if(argv[1][0] == '2'){
printf("Hodnota LEVEL je 2");
}
如您所见,我目前正在检查 argv[]
是否等于字符“1”或“2”,这不是我想要的。
我唯一想到的是用一些字符变量替换'1'和'2',然后将其重铸为int
。完成此过程后,我可以检查它是 int
1 还是 int
2
还有其他方法可以解决我的问题吗?
如果你不允许使用标准库,那么你可以这样做:
int val = 0;
for ( char *p = argv[1]; *p != 0; p++ )
{
val *= 10;
val += *p - '0’;
}
十进制数字的字符编码保证是连续的,因此减去 '0'
的编码会得到等效的整数值 - 例如,'1' - '0' == 1
、'2' - '0' == 2
等。
您可能想要添加某种验证 - 如果 argv[1] == "abcd"
,您将得到一个有趣的结果。
如果您被允许使用标准库,请改用strtol
。