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

为何for循环内的if条件始终不成立?C++计算器程序调试求助

C++计算器循环条件问题

我刚学C++,掌握基础后想做小型项目练手。先写了个处理两个数的简易计算器,现在想升级成能让用户输入数值数量、从左到右依次运算的版本。

我用vector存储输入的数值,用for循环遍历,但为了避免循环计数器超出vector最后一个索引,加了个if语句来调整计算并终止循环。可这个if条件始终不成立,明明逻辑上应该触发。

我给if块里的打印文本加了##########标记,运行后发现完全没触发;把条件改成1==1时,if块能正常执行,循环也能按预期终止。我还在if块首行加了cout输出i和qty_numbers变量,确认变量在作用域内,所以问题肯定出在if条件本身。

以下是我的代码:

#include <iostream>
#include <vector>

int main()
{
    //Declare variables
    int qty_numbers = 0;
    int case_operation;
    double result = 0;
    double input_numbers;

    std::cout << "Please enter the amount of numbers:\n";
    std::cin >> qty_numbers;

    //Initialize a vector named numbers
    std::vector<double> numbers;
    
    std::cout << "Please enter the numbers:\n";

    //Let the user enter the numbers which get stored into the vector numbers
    for (int i = 0; i < qty_numbers; i++) {
        std::cin >> input_numbers;
        numbers.push_back(input_numbers);
    }

    //Process the first two numbers entered
    if (result == 0) {
        std::cout << "Please select the arithmetic operation:\n";
        std::cout << "1: Addition\n";
        std::cout << "2: Subtraction\n";
        std::cout << "3: Multiplication\n";
        std::cout << "4: Division\n";
        std::cout << "5: Exit program\n";
        std::cin >> case_operation;
        switch (case_operation) {
        case 1: //Addition
            result = numbers[0] + numbers[1];
            break;
        case 2: //Subtraction
            result = numbers[0] - numbers[1];
            break;
        case 3: //Multiplication
            result = numbers[0] * numbers[1];
            break;
        case 4: //Division
            result = numbers[0] / numbers[1];
            break;
        case 5: //Exit program
            return 0;
            break;
        default:
            std::cout << "Error!\n";
            break;
        }
    }

    //Loop to calculate the 3rd, 4th ... number with the result of the previous calculation (just left to right)
    for (int i = 1; i < qty_numbers; i++) {
        std::cout << i;
        std::cout << qty_numbers - 1;

        //If the index would go out of bounds calculate with the last index of the vector and end the loop
        if (i == qty_numbers - 1) { //Problem: The if condition is not correct and therefore this block is skipped.
            std::cout << "Please select the arithmetic ########## operation:\n";
            std::cout << "1: Addition\n";
            std::cout << "2: Subtraction\n";
            std::cout << "3: Multiplication\n";
            std::cout << "4: Division\n";
            std::cout << "5: Exit program\n";
            std::cin >> case_operation;
            switch (case_operation) {
                case 1: //Addition
                    result = result + numbers[i + 1];
                    break;
                case 2: //Subtraction
                    result = result - numbers[i + 1];
                    break;
                case 3: //Multiplication
                    result = result * numbers[i + 1];
                    break;
                case 4: //Division
                    result = result / numbers[i + 1];
                    break;
                case 5: //Exit program
                    return 0;
                    break;
                default:
                    std::cout << "Error!\n";
                    break;
            };
            break;
        }
        
        //Calculate with the next number except the last (last would be if-statement before)                
        std::cout << "Please select the arithmetic operation:\n";
        std::cout << "1: Addition\n";
        std::cout << "2: Subtraction\n";
        std::cout << "3: Multiplication\n";
        std::cout << "4: Division\n";
        std::cout << "5: Exit program\n";
        std::cin >> case_operation;
        switch (case_operation) {
            case 1: //Addition
                result = result + numbers[i + 2];
                break;
            case 2: //Subtraction
                result = result - numbers[i + 2];
                break;
            case 3: //Multiplication
                result = result * numbers[i + 2];
                break;
            case 4: //Division
                result = result / numbers[i + 2];
                break;
            case 5: //Exit program
                return 0;
                break;
            default:
                std::cout << "Error!\n";
                break;
        }
    }

    //Print out the result of the calculation
    std::cout << "Your result is " << result << "\n";
    return 0;
}

内容的提问来源于stack exchange,提问作者henninfa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:01:16