检查命令行参数中的任何字符是否不是 C 中的“1”或“0”
Checking to see if any character in a command line argument is not a '1' or a '0' in C
我正在编写的程序的一部分需要命令行参数中的二进制数,return它的值是十进制数。程序的一部分会检查以确保命令行参数是一个实际的二进制数(意味着它不包含数字 2-9)。这似乎实现起来相对简单,但由于某些原因这不起作用:
int i;
for (i = 0; i < strlen(argv[3] - 1); i++)
{
if (argv[3][i] != '0' || argv[3][i] != '1' || argv[3][i] != '[=10=]')
{
printf("arg[3][%d]: %c\n", i, argv[3][i]);
printf("ERROR: argument 3 is not a binary integer\n%);
return 0;
}
}
(argv[3] 是二进制值应该去的参数)。
即使我只是给它参数“0001”,它也会return:
"arg[3][0]: 0
错误:参数 3 不是二进制整数
其余代码工作正常,所以我知道这很明显我没有看到 if 语句中的逻辑。有帮助吗?
行:
if (argv[3][i] != '0' || argv[3][i] != '1' || argv[3][i] != '[=10=]')
将始终解析为真。您应该使用 &&
作为 AND 而不是 ||
作为 OR。
此外,您在 strlen(argv[3]-1);
中遇到了错误。我猜你实际上是指 strlen(argv[3])-1;
,因为第一个将指向内存中的错误位置。但是你也不想要第二个,因为那样会错过最后一个字符。
以下是修改后的代码:
#include <stdio.h>
#include <string.h>
int main( int argc, char** argv )
{
int i;
for (i = 0; i < strlen(argv[3]); i++)
{
if (argv[3][i] != '0' && argv[3][i] != '1' && argv[3][i] != '[=11=]')
{
printf("arg[3][%d]: %c\n", i, argv[3][i]);
printf("ERROR: argument 3 is not a binary integer\n");
return 0;
}
}
return 0;
}
我正在编写的程序的一部分需要命令行参数中的二进制数,return它的值是十进制数。程序的一部分会检查以确保命令行参数是一个实际的二进制数(意味着它不包含数字 2-9)。这似乎实现起来相对简单,但由于某些原因这不起作用:
int i;
for (i = 0; i < strlen(argv[3] - 1); i++)
{
if (argv[3][i] != '0' || argv[3][i] != '1' || argv[3][i] != '[=10=]')
{
printf("arg[3][%d]: %c\n", i, argv[3][i]);
printf("ERROR: argument 3 is not a binary integer\n%);
return 0;
}
}
(argv[3] 是二进制值应该去的参数)。
即使我只是给它参数“0001”,它也会return:
"arg[3][0]: 0
错误:参数 3 不是二进制整数
其余代码工作正常,所以我知道这很明显我没有看到 if 语句中的逻辑。有帮助吗?
行:
if (argv[3][i] != '0' || argv[3][i] != '1' || argv[3][i] != '[=10=]')
将始终解析为真。您应该使用 &&
作为 AND 而不是 ||
作为 OR。
此外,您在 strlen(argv[3]-1);
中遇到了错误。我猜你实际上是指 strlen(argv[3])-1;
,因为第一个将指向内存中的错误位置。但是你也不想要第二个,因为那样会错过最后一个字符。
以下是修改后的代码:
#include <stdio.h>
#include <string.h>
int main( int argc, char** argv )
{
int i;
for (i = 0; i < strlen(argv[3]); i++)
{
if (argv[3][i] != '0' && argv[3][i] != '1' && argv[3][i] != '[=11=]')
{
printf("arg[3][%d]: %c\n", i, argv[3][i]);
printf("ERROR: argument 3 is not a binary integer\n");
return 0;
}
}
return 0;
}