#include <stdio.h>
int main(void) {
int x,y,z=0,number,digit;
char c;
int sum = 0;
int temp = 0;
while (z==0){
printf("enter 2-9 for hex\n");
scanf("%c",&c);
x = (int)c-48;
if((int)c>49 && (int)c<59){
printf("enter number");
scanf("%d",&number);
break;
}
else if ((int)c<50 || (int)c>58){
printf("wrong number\n");
z==0;
}
else
printf("error");
z==0;
}
while (number != 0) {
digit = number % 10;
number = number / 10;
if (digit >= x) {
printf("wrong input!!!");
return 0;
}
else {
int temp1 = temp;
if (temp1 == 0) {
digit = digit * 1;
}
else {
while (temp1 != 0) {
digit = digit * x;
temp1--;
}
}
}
sum = sum + digit;
temp = temp + 1;
}
printf("\nThe number in Decimal is:%d", sum);
}这是我的代码,关于把十六进制转换成decimals.The的问题是,当我输入2-9时一切都是好的,但是当我输入1,第一次循环2次,如果我输入10-99循环3次,如果我输入100-999,循环4次,等等.
为什么在设置Z==0;之后,它仍然多次运行?
发布于 2020-05-21 16:26:16
情况是,你的z的条件一直是正确的。您的开始条件i == 0,这将启动while循环。在z不大于0时,while循环停止。所以在while循环的某个地方,你必须在不为零的时候改变z。然后你的时间循环就停止了。如果-否则,请使用关闭和打开"{}“。这有助于并提高可读性。
例如:
#include <stdio.h>
int main(void) {
int x,y,z=0,number,digit;
char c;
int sum = 0;
int temp = 0;
while (z==0){
printf("enter 2-9 for hex\n");
scanf("%c",&c);
x = (int)c-48;
if((int)c>49 && (int)c<59){
printf("enter number");
scanf("%d",&number);
break;
}
else if ((int)c<50 || (int)c>58){
printf("wrong number\n");
z==0;
}
else {
printf("error");
z==0;
}
z = 1;
}
while (number != 0) {
digit = number % 10;
number = number / 10;
if (digit >= x) {
printf("wrong input!!!");
return 0;
}
else {
int temp1 = temp;
if (temp1 == 0) {
digit = digit * 1;
}
else {
while (temp1 != 0) {
digit = digit * x;
temp1--;
}
}
}
sum = sum + digit;
temp = temp + 1;
}
printf("\nThe number in Decimal is:%d", sum);
}希望这能有所帮助。
https://stackoverflow.com/questions/61938835
复制相似问题