C 在第一次printf之后,它什么也不做(成功编译)

C 在第一次printf之后,它什么也不做(成功编译),c,scanf,lag,C,Scanf,Lag,当我运行这段代码时,它甚至没有到达while循环。它滞后于scanf。你知道为什么吗 #include<stdio.h> int main(int argc, char* argv[]){ int hex_num; int mask=9; int test_int=0; int i=0; int res_mask; printf("Enter input as a hexadmcal number"); scanf( "%

当我运行这段代码时,它甚至没有到达while循环。它滞后于
scanf
。你知道为什么吗

#include<stdio.h>

int main(int argc, char* argv[]){

    int hex_num;
    int mask=9;
    int test_int=0;
    int i=0;
    int res_mask;

    printf("Enter input as a hexadmcal number");
    scanf( "%x", &hex_num);

    res_mask= mask & hex_num;


    while( (res_mask!=mask) || i<32){
        hex_num=hex_num>>1;
        res_mask= mask & hex_num;
        i++;
    }

        if(res_mask==mask){
            test_int=1;
        }


    (test_int=1) ? (printf("yes")) : (printf("no"));

    return 0;
} 
#包括
int main(int argc,char*argv[]){
int十六进制数;
int-mask=9;
int test_int=0;
int i=0;
int res_面具;
printf(“输入十六进制数”);
scanf(“%x”、&hex_num);
res_mask=mask和hex_num;
而((res|u mask!=mask)| i>1;
res_mask=mask和hex_num;
i++;
}
if(res_mask==mask){
test_int=1;
}
(测试int=1)?(printf(“是”):(printf(“否”);
返回0;
} 

您将进入while循环,该循环不会终止,因为
i>=1)
如果(十六进制数<掩码)
{
printf(“否”);
返回0;
}
else如果(~hex_num&mask)==0)
{
printf(“是”);
返回0;
}

如果提示结束时没有\n,它将保留在缓冲区中,不会显示。您是否已使用调试器对此进行了验证,或者只是因为没有看到任何内容被打印出来?
(test\u int=1)
-->
(test\u int=1)
添加类似于printf的内容(“hex\n”,hex\u num)
scanf
之后;你会发现那不是挂起的地方。至于
while((res_mask!=mask)| i 32.有什么想法吗?当i=33,34,…它在检查
的同时检查
条件,但忽略
i
的值并继续迭代。在检查条件时,其他变量如何影响
i
?(代码中的调试器::Blocks)@YulianKhlevnoy我不明白你的问题。我解释过——我想很清楚——为什么循环会无限期地继续。循环32次后(在一个32位整数的系统上),hex_num将为零(如果它最初是>=0和<2**31)。就是这样吗?第一次(iI)我想知道六元数的位序列中是否有1001,这样循环就可以在第一次出现时停止
printf("%s\n", test_int ? "yes" : "no");
#include <stdio.h>

int main(int argc, char** argv)
{
    int mask = 9;
    unsigned int hex_num;

    for (;;)
    {
        fprintf(stderr, "Enter input as a hexadecimal number: ");
        int nscanned = scanf("%x", &hex_num);
        if (nscanned == 1)
            break;
        else if (nscanned == EOF)
            return 0;
    }

    while (hex_num && (~hex_num & mask))
        hex_num >>= 1;

    printf("%s\n", hex_num ? "yes" : "no");

    return 0;
} 
    for (;; hex_num >>= 1)
        if (hex_num < mask)
        {
            printf("no");
            return 0;
        }
        else if ((~hex_num & mask) == 0)
        {
            printf("yes");
            return 0;
        }