如果ifstream在switch case下不起作用怎么办?

问题描述 投票:0回答:1

在下面的代码片段中,我调用了 2 个不同的文件。第一次一切正常,文本从文件中正确输出,但是当在 switch case 内调用第二个文件时,编译器会写入错误: error: Jump to case label 61 | 61案例2: | ^

有谁知道如何离开开关盒和 ifstream 结构并使一切正常工作?

float bank(int third_q, int forth_q) {
    int k;
    ifstream file1("vklad1.txt");
    char ch1;
    while (file1.get(ch1)) {
        cout << ch1;
    }
    file1.close();
    cin >> third_q;
    while (third_q != 1 || third_q != 2) {
        switch(third_q)
            {
                case 1:
                    double sum, percent, duration, end_sum;
                    cout << "Введите сумму своих сбережений:";
                    cin >> sum;
                    cout << endl;
                    cout << "Введите процент вклада:";
                    cin >> percent;
                    cout << endl;
                    cout << "Введите количество лет (если процент годовой) или месяцев (если процент месячный) на которые вы планируете положить деньги на вклад:";
                    cin >> duration;
                    cout << endl;
                    cout << "Итоговая сумма будет равна ";
                    end_sum = sum * pow((1 + percent/100), duration);
                    cout << end_sum << '\n';
                    k = 1;
                    break;
                case 2: 
                    k = 1;
                    break;
                default: 
                    cout << "Неверный ввод, повторите попытку." << '\n';
                    cin >> third_q;
                    break;
                }
        if (k == 1) {
            break;
        }
    }
    cout << "Хотите ли вы узнать о рисках, связанных с этим вариантом вложения?\n1)Да\n2)Нет" << endl;
    cin >> forth_q;
    while (forth_q != 1 || forth_q != 2) {
        switch (forth_q)
        {
            case 1:
            ifstream file2("vklad2.txt");
                char ch2;
                while (file2.get(ch2)) {
                    cout << ch2;
                }
                file2.close();
                k = 2;
                break;
            case 2: 
                k = 2;
                break;
            default:
                cout << "Неверный ввод, повторите попытку." << '\n';
                cin >> forth_q;
                break;
        }
        if (k == 2) {
            break;
        }
    }
    return 0;
}
c++ switch-statement rcpp ifstream cppcheck
1个回答
0
投票

While 循环在进入循环体之前检查条件,因此在进入循环体之后

cin >> third_q;
while (third_q != 1 || third_q != 2) {

我们不能期望

case 1
case 2
中的语句被执行。状态检查应在切换之后进行。值得庆幸的是,我们有一个 do\while 循环

下一个问题:这不是合法的 C++

          case 1:
                double sum, percent, duration, end_sum;

案例应该是语句或语句列表,可能使用

break;
退出 switch 结构。这允许复合语句,即您应该将代码包装在
{}
中。

您的函数不会通过引用获取其参数,这看起来像是语义错误,因为您不知道输入的值在函数之外。

© www.soinside.com 2019 - 2024. All rights reserved.