C 在第一次printf之后,它什么也不做(成功编译)
当我运行这段代码时,它甚至没有到达while循环。它滞后于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( "%
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;
}