gpt4 book ai didi

命令因某种原因卡住

转载 作者:行者123 更新时间:2023-11-30 15:00:50 26 4
gpt4 key购买 nike

我试图输入用户的基本 IP 地址,但我的命令卡在 scanf 中,之后没有执行任何内容。

   int ip1,ip2,ip3,ip4;
scanf("%d.%d.%d.%d",&ip1,&ip2,&ip3,&ip4);
printf("Here");

那么,基本上“Here”永远不会被打印,并且命令 scanf 永远不会结束?

#include <stdio.h>
#include<math.h>
int main(void) {
char input;
char rep = 'r';
char quit = 'q';
char first = '1';
char second = '2';
input = rep;
while( input != quit) {
printf("What type of conversion do you want? \n");
printf("Enter 1 for 32-bit number to dot-decimal conversion, 2 for the inverse of operation: ");
char val;
scanf(" %c", &val);
if( val == first) {
} else if( val == second) {
printf("\nEnter dot-decimal IP address:");

int ip1,ip2,ip3,ip4;
scanf(" %d.%d.%d.%d", &ip1,&ip2,&ip3,&ip4);
printf("Here");
unsigned int ip = 0,c,k,counter = 31;
for(c = 7; c >= 0; c--) {
k = ip1 >> c;
if(k & 1) {
int temp = 2,i;
for(i = 0; i < counter;i++) {
temp *= 2;
}
ip += temp;
counter--;
}

}

for(c = 7; c >= 0; c--) {
k = ip2 >> c;
if(k & 1) {
int temp = 2,i;
for(i = 0; i < counter;i++) {
temp *= 2;
}
ip += temp;
counter--;
}
}


for(c = 7; c >= 0; c--) {
k = ip3 >> c;
if(k & 1) {
int temp = 2,i;
for(i = 0; i < counter;i++) {
temp *= 2;
}
ip += temp;
counter--;
}
}

for(c = 7; c >= 0; c--) {
k = ip4 >> c;
if(k & 1) {
int temp = 2,i;
for(i = 0; i < counter;i++) {
temp *= 2;
}
ip += temp;
counter--;
}
}


printf("%u is the IP Address",ip);

}
printf("\n \n Enter r to repeat, q to quit:");
scanf(" %c",&input);
}
return 0;

}

这正是我正在做的事情。当我尝试以十进制形式获取 IP 地址时,它被卡住了。

最佳答案

我在更新后分析了您的代码(完整代码),发现问题不在于 scanf 的输入,而是在于获取数据后执行的 for 循环.

看看那个循环:

    unsigned int ip = 0,c,k,counter = 31;
for(c = 7; c >= 0; c--) {
k = ip1 >> c;
if(k & 1) {
int temp = 2,i;
for(i = 0; i < counter;i++) {
temp *= 2;
}
ip += temp;
counter--;
}
}

尤其是在 for(c = 7; c >= 0; c--) 时,考虑到 c 的类型为 unsigned int... 我看到这个循环是无限的,因为减量从 0 产生新的正值 UINT_MAX (请参阅 limit.h)。

关于命令因某种原因卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41844650/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com