c - 如果语句条件未满足但程序卡住
问题描述
基本上条件不满足,但程序不会从主 if 语句进入 else 语句。我会给出它的要点,前面是一个 tl;dr 版本,下面是完整版本。
tl;博士版本:
a = 1;
b = 2;
c = 3;
if(a == 1)
{
if(b == 1 && c == 1)
do x;
if(b == 2 && c == 2)
do y;
if(b == 3 && c == 3)
do z;
}
else
printf("Invalid\n");
基本上没有满足较小的 if 语句条件,程序应该继续执行 else 语句并打印“无效”,但它不会。它什么也不做。实际程序见:
#include <cs50.h>
#include <stdio.h>
int checksum = 10;
int j = 16;
long first = 5;
long second = 6;
int main(void)
{
checksum %= 10;
if(checksum == 0)
{
if(j == 15 && first == 3 && (second == 4 || second == 7))
printf("AMEX\n");
if(j == 16 && first == 5 && (second == 1 || second == 2 || second == 3 || second == 4 || second == 5))
printf("MASTERCARD\n");
if((j == 16 || j == 13) && first == 4)
printf("VISA\n");
}
else
printf("INVALID\n");
}
解决方案
如果您希望“使代码看起来更简洁”,您可以使用一种称为“提前退出”的编程模式。基本思想是,对于每个“正确”的答案,您都返回值。由于您还没有使用函数,您的程序将不得不提前退出;但是,通常一个函数返回“正确”值,而不是程序在成功/失败时返回。
#include <cs50.h>
#include <stdio.h>
#include <stdlib.h>
int checksum = 10;
int j = 16;
long first = 5;
long second = 6;
int main(void) {
checksum %= 10;
if(checksum == 0 && j == 15 && first = 3 && (second == 4 || second == 7) {
printf("AMEX\n");
return EXIT_SUCCESS;
}
if (checksum == 0 && j == 16 && first == 5 && (second == 1 || second == 2 || second == 3 || second == 4 || second == 5))
printf("MASTERCARD\n");
return EXIT_SUCCESS;
}
if (checksum == 0 && (j == 16 || j == 13) && first == 4)
printf("VISA\n");
return EXIT_SUCCESS;
}
printf("INVALID\n");
return EXIT_FAILURE;
}
int
inint main(void) {
是程序的返回码。它被发送回终端,因此人们可以判断程序是否正确运行或遇到错误。 EXIT_SUCCESS
并且EXIT_FAILURE
是 C 常量,在(我认为<stdlib.h>
)中定义。
另外,考虑养成使用int main(int argc, char* argv)
over的习惯int main(void)
。即使您不立即使用实参参数,它也是键入main
函数的一种方法,您永远不必更新。
推荐阅读
- javafx - 为什么 javaFX 在运行时使用阿拉伯语太慢?
- java - Spring Boot GCP Data Spanner 延迟问题
- node.js - 节点 - 通过请求将 xml 发布到服务器
- java - @FeignClient 强制 @GetMapping 和 @RequestBody 发布
- swift - 删除键的命令,包含字典数组的字典
- java - 如何在 xtext 语法中实现导入
- kubernetes - Kubernetes - 如何聚合应用程序日志
- for-loop - 在通道上迭代时出错“范围内的变量太多”
- c++ - 为什么我会收到此警告?“成员 'x' 未在此构造函数中初始化”
- symfony - Symfony3 在 Doctrine2 中保留嵌入形式(违反完整性约束:空字段)