c -我有两个相邻的while循环,但是当第一个while循环改变输入时,我如何使用原始输入运行第二个while循环?&



很抱歉问这个奇怪的问题,但我只是一个初学者。我创建了一个程序,其中有两个相邻的while循环。第一个while循环接受用户输入并重复,直到input=0。当第二个while循环开始时,它从第一个while循环中获取input = 0。如何运行和原始用户输入第二个while循环吗?谢谢你。

unsigned long long int inp,inp1,rem,rem1,ans=0,ans1=0,place_value=1,place_value1=1;

printf("Please input binary for conversion:n");
scanf("%llu", &input);

inp=input;
while (input>0){
rem=input%10; 
ans=ans+rem*place_value;  
input=input/10;
place_value=place_value*2; 
}
while (input!=0){
rem1 = inp1 % 10;
ans1 = ans1 + rem * place_value1;
place_value1 = place_value1* 2;
inp1 = inp1 / 10;
}
printf("%d in Binary is %llu in Decimal Form.nn", inp,ans);
printf("%d in Binary is %d in Octal Form.n", inp1,ans1);
printf("");

我终于找到了一个没有函数的修复。谢谢大家对我的帮助。声明另一个变量确实解决了这个问题,我只需要对它进行一些改进。

else if(op=='B' || op=='b'){
unsigned long long int inp,rem=0,ans=0,place_value=1;
printf("You have chosen Binary to Decimal and Octaln");
printf("Please input binary for conversion:n");
scanf("%llu", &input);
inp=input;
while (input>0){
rem=input%10; 
ans=ans+rem*place_value;  
input=input/10;
place_value=place_value*2; 
}
unsigned long long int rem1=0,ans1=0,place_value1=1;
input1=inp;
while (input1!=0){
rem1 = input1 % 10;
ans1 = ans1 + rem1 * place_value1;
place_value1 = place_value1 * 2;
input1 = input1 / 10;
}

printf("%llu in Binary is %llu in Decimal Form.nn", inp,ans);
printf("%llu in Binary is %o in Octal Form.n", inp,ans1);
main();
}

你的代码中有太多的变量。相似的名称,如果只是附加了一些数字不同,则会造成混乱。你把一切都搞混了。例如,您从未将值赋给inp1,而在应该是inp1的地方使用input。你在应该是rem1的地方用了rem。这太复杂了……是时候使用函数了…

unsigned long long int foo(unsigned long long int input)
{
unsigned long long int rem;
unsigned long long int ans=0;
unsigned long long int place_value=1;
while (input>0){
rem = input % 10; 
ans = ans + rem * place_value;  
input = input / 10;
place_value = place_value * 2; 
}
return ans;
}
unsigned long long int bar(unsigned long long int input)
{
unsigned long long int rem;
unsigned long long int ans=0;
unsigned long long int place_value=1;
while (input!=0){
rem = input % 10;
ans = ans + rem * place_value;
place_value = place_value * 2;
input = input / 10;
}
return ans;
}

,然后使用

这样的函数
unsigned long long int input, ans_foo, ans_bar; 

printf("Please input binary for conversion:n");
scanf("%llu", &input);

ans_foo = foo(input);
ans_bar = bar(input);
printf("%d in Binary is %llu in Decimal Form.nn", input, ans_foo);
printf("%d in Binary is %d in Octal Form.n", input, ans_bar);
printf("");

注意对我来说,你的两个while循环似乎是一样的……但这是一个无关的错误。

最简单的解决方案是定义一个新变量来存储输入值。unsigned long long int value = input

但我认为这个问题将更容易解决/读取递归。
这里有一个工作示例。

最新更新