c - 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() 末尾的系统停顿之外出现在书中的方式。如果这是一个太基本的问题,我深表歉意,但在这个网站上搜索了一个小时后,我还没有找到答案。
解决方案
我能够使用 paddy 提供的建议使用 fgets 而不是仅仅打印,因为我的角色在传递时被缓冲区吃掉了。我也直接通过命令行启动,因为我的 VSCode 设置没有正确完成,并且在尝试运行已编译的 exe 时遇到了问题。
推荐阅读
- python - 使用按钮提升不同的框架,具体取决于单选按钮的值
- html - 重新排序电子邮件的表格元素
- vue-apollo - 如何调试 nuxt-apollo 服务器端 graphql 请求
- r - dplyr 链中函数内的闪亮输入反应性
- django - 已解决 Django 历史记录未显示在管理员中
- algorithm - 两个值之和最小的背包
- javascript - 如何使用正则表达式将 HTML / XML 拆分为仅使用 JavaScript 的兄弟姐妹?
- c# - 使用 Json.net 反序列化具有一些更改对象名称的 Json
- fastapi - 在 Python 的 FastAPI 自动生成的 OpenAPI/Swagger 文档页面中,如何添加更多错误 http 状态代码?
- php - 是否可以在没有 Zapier 的情况下将 Twilio 集成到 WPForms 中?