c语言 - 简单的 IF Else,但当我尝试生成错误时使命令框崩溃



所以是的,标题说明了一切。这很奇怪,因为在代码的另一部分,我可以正确执行它,它只是搞砸了,我只是非常困惑。

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 ("nn--------------------nn");
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: Malen", 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: Femalen", 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: Unknownn", EMPage);
system ("PAUSE");
return 0;

}

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

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

这是行中错位的参数:

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]

最新更新