有人可以解释为啥我的最后一个 else 语句不会运行吗?

Posted

技术标签:

【中文标题】有人可以解释为啥我的最后一个 else 语句不会运行吗?【英文标题】:Could someone explain why my last else statement will not run?有人可以解释为什么我的最后一个 else 语句不会运行吗? 【发布时间】:2020-11-19 02:40:03 【问题描述】:

我正在尝试将我的 argv 字符串转换为整数。对于某些人来说,我无法让我的最后一个 else 语句运行。任何帮助将不胜感激。我只是从 C 开始。这是我的代码。

#include <cs50.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>


int main(int argc, string argv[])

    if (argc == 2)
    
        for(int i = 0, n = strlen(argv[1]); i < n; i++)
        
            if (!isdigit(argv[1][i])) 
            printf("Usage: ./caesar key\n");
            
            
            
        
    
        else if (argc != 2)
        
            printf("Usage: ./caesar key\n");
        
        
        else if (argc == 2)
        
            int x = atoi(argv[1]);
            printf("%i", x);
            return 0;
        

【问题讨论】:

【参考方案1】:

用大括号和缩进写的,你的代码结构是这样的:

if ( argc == 2 )

     stuff

else

    if ( argc != 2 )
    
         stuff
    
    else if ( argc == 2 )
    
         stuff
    

所以一旦第一次测试失败,执行跳转到对应的else控制的块结束之后。

您编写的代码具有相同的逻辑,只是省略了可选的大括号和不同的空格。

【讨论】:

【参考方案2】:

我的最后一个 else 语句无法运行。 ...为什么我的最后一个 else 语句不会运行?

使用更好的格式,可能更容易看到代码在同一个 if, else if, else if 树中测试了两次 (argc == 2)

int main(int argc, string argv[]) 
  if (argc == 2) 
    for (int i = 0, n = strlen(argv[1]); i < n; i++) 
      if (!isdigit(argv[1][i])) 
        printf("Usage: ./caesar key\n");

      

    
   else if (argc != 2) 
    printf("Usage: ./caesar key\n");
   else if (argc == 2)   // cannot be true given prior `if (argc == 2)`
    int x = atoi(argv[1]);
    printf("%i", x);
    return 0;
  

【讨论】:

以上是关于有人可以解释为啥我的最后一个 else 语句不会运行吗?的主要内容,如果未能解决你的问题,请参考以下文章

matlab中if、else语句运算结果为啥只显示最后一个if的值?

为啥我的代码在 else 语句后出现编译错误?

为啥使用“if-else”语句会在看似相同的三元运算符构造不会产生 TypeScript 编译器错误?

有人可以向我解释为啥 L(长)必须在那里吗? [复制]

有人可以解释一下,我的 mysql 匹配为啥不工作

为啥我的函数 if/else if/else if 语句返回相同的答案?