首页 > 解决方案 > C 程序命令提示符在 if 语句内关闭,而不是在 main() 末尾暂停

问题描述

我正在关注Head First C (2012),并且在第一章中遇到了他们最初的“cards.c”项目的问题。

基本上,代码要求输入一种卡类型,然后根据用户输入的内容输出一个值。但是,我发现命令提示符在执行相应的 if 语句后会自动退出,即使我在 main() 函数的末尾告诉程序暂停或检查键输入也是如此。

我通过在 if 语句中包含卡值的输出来进行半修复,例如

if (card_name[0] == 'K') {
    val = 10;
    printf("The card value is: %i\n", val);
    system("pause");
}

然而,我发现如果我在 for 括号内和 main 末尾都保留 printf 语句和系统暂停,输出将出现两次。因此,我很困惑为什么当我只在 main 末尾而不是在每个 if/else if/else 语句内部输出时命令提示符会自动关闭。

作为参考,我在 Windows 10 上通过 Visual Studio Code 运行并使用 MinGW 进行编译(VSCode 允许我构建,但我通过命令提示符运行)。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char card_name[3];
    puts("Enter the card name: ");
    scanf("%2s", card_name);
    int val = 0;
    if (card_name[0] == 'K') {
        val = 10;
    } else if(card_name[0] == 'Q') {
        val = 10;
    } else if(card_name[0] == 'J') {
        val = 10;
    } else if(card_name[0] == 'A') {
        val = 11;
    } else {
        val = atoi(card_name);
    }
    printf("The card value is: %i\n", val);
    system("pause");
    return 0;
}

对于任何阅读的人来说,这正是代码在 main() 末尾的系统停顿之外出现在书中的方式。如果这是一个太基本的问题,我深表歉意,但在这个网站上搜索了一个小时后,我还没有找到答案。

标签: c

解决方案


我能够使用 paddy 提供的建议使用 fgets 而不是仅仅打印,因为我的角色在传递时被缓冲区吃掉了。我也直接通过命令行启动,因为我的 VSCode 设置没有正确完成,并且在尝试运行已编译的 exe 时遇到了问题。


推荐阅读