gpt4 book ai didi

c - 如何回到C中的main()?

转载 作者:行者123 更新时间:2023-11-30 17:29:18 25 4
gpt4 key购买 nike

我的程序结构是这样的:主功能有两个其他功能之间的菜单(切换)。其中之一只是计算,当它结束时,它会返回到这个(主)菜单。这正是我现在想要的(之前我想在计算后结束程序,并且在所有情况下都有 exit(0); 。但另一个函数很棘手,因为它启动另一个函数(菜单)并且有两个计算选项。其中一个还有另一个开关。

问题是当我通过删除 exit(0); 编辑看起来像这样的代码时;

case 'H':
rhdp(0,n_hdp0, fw_vystup);
vyprazdni_buffer(); //buffer clearing
exit(0);
break;

它只适用于简单的计算,但程序的更深层次部分只能退一步......有什么可能的解决方案吗?提前致谢。

<小时/>

这里有更多代码

void nhdp_menu(float cislo, FILE **fw_vystup)
{
char c;
float y, n_hdp0 = 0.0f, n_hdp1 = 0.0f;
do {
printf("Zadejte nominalni hruby domaci produkt daneho roku: ");

zadani_cisla(&cislo);
n_hdp1 = cislo;
} while (n_hdp1 <= 0);
do {
printf("Zadejte nominalni hruby domaci produkt predesleho roku: ");
zadani_cisla(&cislo);
n_hdp0 = cislo;
} while (n_hdp0 <= 0);
y = (n_hdp1 - n_hdp0) / n_hdp0 * 100;
printf("Tempo rustu nominalniho HDP je %f procent.\n", y);
zapis(fw_vystup, "Nominalni HDP0 = %f ; Nominalni HDP1 = %f ; Tempo rustu nominalniho HDP je %f procent.\n", n_hdp0, n_hdp1, y);

do {
printf("Dodatecne muzete take zjistit tempo rustu REALNEHO HDP:\n");
printf("Pokud znate deflator HDP v danem roce - zadejte D.\n");
printf("Pokud znate primo realne HDP v danem roce - zadejte H.\n");
vyprazdni_buffer();
scanf("%c", &c);

switch (c) { //this is the last (deepest) switch
case 'd':
case 'D':
rhdp_ipd(0, n_hdp0, n_hdp1, fw_vystup);
vyprazdni_buffer();
//exit(0);
break;
case 'h':
case 'H':
rhdp(0,n_hdp0, fw_vystup);
vyprazdni_buffer();
//exit(0);
break;
case 'k':
case 'K':
printf("Konec programu.\n");
break;
default:
printf("Neznama volba.\n");
break;
}
} while (c != 'k' && c != 'K');
return;
}

void tempo_menu(n_hdp0)
{
FILE *fw_vystup;
char c;

do {
printf("Vyberte si, v jakych cenach chcete HDP uvadet.\nPro nominalni zadejte N.\nPro realne zadejte R.\n");
scanf("%c", &c);
vyprazdni_buffer();
switch (c) {
case 'N':
case 'n':
nhdp_menu(0, &fw_vystup); //this here is starting another menu
vyprazdni_buffer();
//exit(0);
break;
case 'R':
case 'r':
rhdp(0, 0, &fw_vystup);
vyprazdni_buffer();
//exit(0);
break;
case 'k':
case 'K':
printf("Konec programu.\n");
break;
default:
printf("Neznama volba.\n");
break;
}
} while (c != 'k' && c != 'K');

return;
}


int main(void)
{
char c;
FILE *fw_vystup;
do {
printf("Zadejte D pro vypocet deflatoru HDP nebo T pro vypocet tempa rustu HDP: ");
scanf("%c", &c);
vyprazdni_buffer();
switch (c) {
case 'd':
case 'D':
deflator(0, &fw_vystup); //for this function everything goes well
// exit(0);
vyprazdni_buffer();
break;
case 't':
case 'T':
tempo_menu();
vyprazdni_buffer();
// exit(0);
break;
case 'k':
case 'K':
printf("Konec programu.\n");
break;
default:
printf("Neznama volba.\n");
break;
}
} while (c != 'k' && c != 'K');
return 0;
}

最佳答案

编辑:

因此,这是假设您将 return 放入所有 case 语句中,因为这是您想要的行为。

在按某些键之前 main 不会打印的问题。尝试在 main 函数中使用 fflush(stdout):

int main(void)
{
char c;
FILE *fw_vystup;
do {
printf("Zadejte D pro vypocet deflatoru HDP nebo T pro vypocet tempa rustu HDP: ");
scanf("%c", &c);
vyprazdni_buffer();
switch (c) {
case 'd':
case 'D':
deflator(0, &fw_vystup); //for this function everything goes well
vyprazdni_buffer();
break;
case 't':
case 'T':
tempo_menu();
vyprazdni_buffer();
break;
case 'k':
case 'K':
printf("Konec programu.\n");
break;
default:
printf("Neznama volba.\n");
break;
}

fflush(stdout); // <--- right here.
} while (c != 'k' && c != 'K');
return 0;
}

关于c - 如何回到C中的main()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25697469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com