简单的 IF Else,但是当我尝试生成错误时使命令框崩溃 [关闭]

Posted

技术标签:

【中文标题】简单的 IF Else,但是当我尝试生成错误时使命令框崩溃 [关闭]【英文标题】:Simple IF Else, but crashes the Command Box when I try to generate an error [closed] 【发布时间】:2018-12-11 07:04:57 【问题描述】:

是的,标题说明了一切。这很奇怪,因为在代码的另一部分,我可以正确执行它,它只是搞砸了,我简直一头雾水。

int main(int argc, char *argv[]) 

char EMPname[50], EMPgender[5], EMPposition[5];
int EMPage;
printf ("Midterm Examination, BSCS (ERCA)\n");
printf ("Welcome, employee!\n");
printf ("Please Input your name: ");
scanf ("%[^\n]s", &EMPname);
printf ("Age: ");
scanf ("%d", &EMPage);
printf ("Gender(M|F): ");
scanf ("%s", &EMPgender);
printf ("Position(P|PA|SP): ");
scanf ("%s", &EMPposition);
printf ("\n\n--------------------\n\n");
if(strcmp(EMPgender, "M")== 0|| strcmp(EMPgender, "m")== 0)
    if (strcmp(EMPposition, "P")== 0 || strcmp(EMPposition, "p")== 0)
        printf ("%s is a Programmer.\n", EMPname);
    else if (strcmp(EMPposition, "PA")== 0 || strcmp(EMPposition, "pa")== 0 || strcmp(EMPposition, "pA")== 0 || strcmp(EMPposition, "Pa")== 0)
        printf ("%s is a Program Analyst.\n", EMPname);
    else if (strcmp(EMPposition, "SP")== 0 || strcmp(EMPposition, "sp")== 0 || strcmp(EMPposition, "sP")== 0 || strcmp(EMPposition, "Sp"== 0))
        printf ("%s is a Senior Programmer.\n", EMPname);
    else
        printf ("%s has no position.\n", EMPname);
    
    printf ("Age: %d, Gender: Male\n", EMPage);
else if (strcmp(EMPgender, "F")== 0|| strcmp(EMPgender, "f")== 0)
        if (strcmp(EMPposition, "P")== 0 || strcmp(EMPposition, "p")== 0)
        printf ("%s is a Programmer.\n", EMPname);
    else if (strcmp(EMPposition, "PA")== 0 || strcmp(EMPposition, "pa")== 0 || strcmp(EMPposition, "pA")== 0 || strcmp(EMPposition, "Pa")== 0)
        printf ("%s is a Program Analyst.\n", EMPname);
    else if (strcmp(EMPposition, "SP")== 0 || strcmp(EMPposition, "sp")== 0 || strcmp(EMPposition, "sP")== 0 || strcmp(EMPposition, "Sp"== 0))
        printf ("%s is a Senior Programmer.\n", EMPname);
    else
        printf ("%s has no position.\n", EMPname);
    
    printf ("Age: %d, Gender: Female\n", EMPage);
else
    if (strcmp(EMPposition, "P")== 0 || strcmp(EMPposition, "p")== 0)
        printf ("%s is a Programmer.\n", EMPname);
    else if (strcmp(EMPposition, "PA")== 0 || strcmp(EMPposition, "pa")== 0 || strcmp(EMPposition, "pA")== 0 || strcmp(EMPposition, "Pa")== 0)
        printf ("%s is a Program Analyst.\n", EMPname);
    else if (strcmp(EMPposition, "SP")== 0 || strcmp(EMPposition, "sp")== 0 || strcmp(EMPposition, "sP")== 0 || strcmp(EMPposition, "Sp"== 0))
        printf ("%s is a Senior Programmer.\n", EMPname);
    else
        printf ("%s has no position.\n", EMPname);
    
    printf ("Age: %d, Gender: Unknown\n", EMPage);
system ("PAUSE");
return 0;

程序所做的是简单的输入和输出,但是 IF ELSE 部分需要我们比较字符。 EMPposition 和 EMPgender 部分的预期输入是这里造成最多问题的输入。

编辑:我这次展示了我的整个代码,soz。

【问题讨论】:

EMPpositionEMPname 是如何定义的?请提供minimal reproducible example 什么是EMPpositionEMPname 是什么?它们是如何初始化的?您可以尝试创建一个minimal reproducible example 向我们展示吗? 并且始终将实际错误完整地复制粘贴到问题正文中(作为文本!)。请阅读how to ask good questions,以及this question checklist。 对不起,谢谢先生。我对此很陌生。 OT:如果使用s 扫描到char 数组,则不要传递数组的地址(如scanf ("%s", &EMPposition);),而是其第一个字符的地址,如@987654333 @ 这实际上和 scanf ("%s", EMPposition); 是一样的 【参考方案1】:

这是一个错位的括号:

if (strcmp(EMPposition, "SP")== 0 || strcmp(EMPposition, "sp")== 0 || strcmp(EMPposition, "sP")== 0 || strcmp(EMPposition, "Sp"== 0))

为了更正它替换

strcmp(EMPposition, "Sp"== 0)

strcmp(EMPposition, "Sp") == 0

您将"Sp" == 0 的结果(产生0)传递给strcmp 函数,然后该函数尝试取消引用它,调用未定义的行为。

你的编译器应该在 gcc 上给你一个警告:

warning: passing argument 2 of 'strcmp' makes pointer from integer without a cast [-Wint-conversion]

【讨论】:

非常感谢先生。老实说,这让我连续 30 分钟兴奋不已。我正在使用 Dev C++,它没有给我一个警告,所以我可能会考虑改变它。谢谢! ^^

以上是关于简单的 IF Else,但是当我尝试生成错误时使命令框崩溃 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

SeleniumLibrary.Input文本中的错误 - 用于if / else块

当我尝试在 if-else 方法中使用动画骨架小部件时出现错误 '_debugLifecycleState != _ElementLifecycle.defunct': is not true。”

我正在尝试使用 else if 语句来验证电子邮件,但是它会在 else if(password.isEmpty) 上抛出错误,说“else without if”

MySQL存储过程语法错误:if else

简单 if-then-else 中的 Ocaml 语法错误

更漂亮的将 if / else 重新格式化为单行