You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两个相邻while循环首个修改输入值 如何让第二个使用原始输入运行

问题核心原因

  • 第一个while循环直接修改了原始输入变量input,循环结束后input已经被置为0,第二个循环自然无法直接使用该变量获取初始输入
  • 现有代码存在多处变量未初始化、引用错误的问题:input没有在变量声明段定义,第二个循环用到的inp1从未赋值,循环内错误引用了第一个循环的rem变量而非当前循环的rem1

修复方案

你已经做了原始输入备份的操作inp=input,直接调整第二个循环的逻辑,用备份的原始值来运行即可,同时修正逻辑错误:

  1. 补充声明input变量
  2. 给inp1赋值为备份的原始输入inp
  3. 将第二个循环的判断条件改为inp1>0,不要用已经被修改的input做判断
  4. 修正第二个循环内的变量引用错误,以及输出语句的格式符适配问题

修正后完整代码

#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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 09:06:03