在下面的代码片段中,我调用了 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;
}
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 结构。这允许复合语句,即您应该将代码包装在 {}
中。
您的函数不会通过引用获取其参数,这看起来像是语义错误,因为您不知道输入的值在函数之外。