两个相邻while循环首个修改输入值 如何让第二个使用原始输入运行
问题核心原因
- 第一个while循环直接修改了原始输入变量
input,循环结束后input已经被置为0,第二个循环自然无法直接使用该变量获取初始输入 - 现有代码存在多处变量未初始化、引用错误的问题:
input没有在变量声明段定义,第二个循环用到的inp1从未赋值,循环内错误引用了第一个循环的rem变量而非当前循环的rem1
修复方案
你已经做了原始输入备份的操作inp=input,直接调整第二个循环的逻辑,用备份的原始值来运行即可,同时修正逻辑错误:
- 补充声明
input变量 - 给
inp1赋值为备份的原始输入inp - 将第二个循环的判断条件改为
inp1>0,不要用已经被修改的input做判断 - 修正第二个循环内的变量引用错误,以及输出语句的格式符适配问题
修正后完整代码
#include <stdio.h> int main() { // 补充声明input变量 unsigned long long int input, 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; } // 直接复用第一个循环算出的十进制结果转八进制,逻辑更简单不易出错 unsigned long long int dec_temp = ans; while (dec_temp != 0) { ans1 = ans1 * 10 + dec_temp % 8; dec_temp = dec_temp / 8; } printf("%llu in Binary is %llu in Decimal Form.\n\n", inp, ans); printf("%llu in Binary is %llu in Octal Form.\n", inp, ans1); return 0; }
如果你坚持要在第二个循环里直接逐位处理二进制输入计算,也可以调整为如下写法:
// 给第二个循环的操作变量赋值为原始输入备份 inp1 = inp; while (inp1 > 0) { rem1 = inp1 % 10; ans1 = ans1 + rem1 * place_value1; place_value1 = place_value1 * 2; inp1 = inp1 / 10; } // 此时ans1为十进制值,再做一次十进制转八进制处理即可
内容的提问来源于stack exchange,提问作者Lapnesnoj
相关产品推荐
相关产品推荐

