为什么不是';t我的if语句函数填充我的变量(C)?

为什么不是';t我的if语句函数填充我的变量(C)?,c,C,我的if语句在控制流方面工作-即它捕获条件并相应地执行或通过(下面的第二个if语句)。但是,当我使用值2/bankers.c2调用编译后的程序时,num_进程的值将恢复为0,并将0打印到控制台,而不是2。当我在if()之外取消对该函数的第二次调用的注释时,它就工作了。无论调用什么函数,它都不应该填充变量吗?我知道可以在if语句中调用fork()函数。这更像是一个理论问题 int num_processes = 1; if (argv[1] == NULL) { printf("

我的if语句在控制流方面工作-即它捕获条件并相应地执行或通过(下面的第二个if语句)。但是,当我使用值2
/bankers.c2
调用编译后的程序时,num_进程的值将恢复为0,并将0打印到控制台,而不是2。当我在if()之外取消对该函数的第二次调用的注释时,它就工作了。无论调用什么函数,它都不应该填充变量吗?我知道可以在if语句中调用fork()函数。这更像是一个理论问题

int num_processes = 1;
if (argv[1] == NULL)
{
    printf("Please enter an integer command line argument between 1 and 20 (exiting)\n\n");
    return 1;
}
else
{
    char *remainder;
    if (num_processes = strtol(argv[1], &remainder, 10) < 1)
    {
        fprintf(stderr, "Please request 1 or more processes (exiting)\n");
        return 2;
    }
    // num_processes = strtol(argv[1], &remainder, 10);
    printf("Rest of string: %s\n", remainder);
}
printf("Num processes %u\n", num_processes);
int num_进程=1;
如果(argv[1]==NULL)
{
printf(“请输入介于1和20之间的整数命令行参数(正在退出)\n\n”);
返回1;
}
其他的
{
字符*余数;
if(num_processes=strtol(argv[1],&余数,10)<1)
{
fprintf(stderr,“请请求一个或多个进程(正在退出)”;
返回2;
}
//num_进程=strtol(argv[1],&余数,10);
printf(“字符串的剩余部分:%s\n”,剩余部分);
}
printf(“Num进程%u\n”,Num\u进程);
顺便说一句,如果您增加警告选项,编译器可能会警告您这会让您感到困惑。对于gcc,使用
-Wall
,例如:

<source>:16:9: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
   16 |     if (num_processes = strtol(argv[1], &remainder, 10) < 1)
      |         ^~~~~~~~~~~~~
:16:9:警告:在用作真值的赋值周围建议使用括号[-wParenthes]
16 | if(num_进程=strtol(argv[1],&余数,10)<1)
|         ^~~~~~~~~~~~~

num_进程=strtol(argv[1],&restinent,10)<1
num_进程=(strtol(argv[1],&restinent,10)<1)
相同。这就是你想要的吗?谢谢!它现在很有意义-它的计算结果为false,这是分配给num_进程的值-即0。括号控制计算结果。是的,墙也有帮助。我将开始更多地使用它。
if (num_processes = (strtol(argv[1], &remainder, 10) < 1))
if ((num_processes = strtol(argv[1], &remainder, 10)) < 1)
num_processes = strtol(argv[1], &remainder, 10);
if (num_processes < 1)
<source>:16:9: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
   16 |     if (num_processes = strtol(argv[1], &remainder, 10) < 1)
      |         ^~~~~~~~~~~~~