在输入if条件-C时,变量(char)不会出现

  • 本文关键字:char 变量 if 条件 c netbeans cygwin
  • 更新时间 :
  • 英文 :


我是C语言的新手,当我试图在NetBeans上构建这个应用程序时,显然在编译这个函数时没有错误。但是,当用户输入其姓名和性别时,应用程序通常会输入IFELSE IFELSE,但在IFELSE IF中,用户名不会出现在printf((方法中。

#include <stdio.h>
#include <stdlib.h>
ex19(){
char name[100];
char genre;
printf("Enter your name: ");
scanf("%s", &name);
printf("Enter your genre: ");
scanf("%s", &genre);
if (genre == 'M'){
printf("%s you are a BOY", name);
} 
else if (genre == 'F'){
printf("%s is GIRL", name);
}
else {
printf("INVALID GENRE");
}
}
main(){
ex19();
}

这个算法会有什么问题?对不起,我是C编程的新手,我冒着不看书或视频课就学习这种语言的风险。目前,我做得很好,因为我以前知道用Java、JavaScript、PHP编程,现在又知道用C语言编程。但这段代码到底发生了什么?

您已经将name定义为一个字符数组。数组类型的变量扮演的角色与指针非常相似。在namescanf语句中,使用&name,它是指向该数组的指针。这让它走得太远了;删除&。

这个算法会有什么问题?

算法很好。。。。这个问题似乎源于的高潮

  • 其中变量存储在内存中

  • 将变量genre声明为char(指定保存一个字节大小的单个字符(,并随后尝试将数据读取为字符串scanf("%s", &genre);

解释:

当执行代码时,genre的地址在阵列char name[100];的地址之前一个字节

输入名称后,名称将按预期放置在字符数组name中。类型的后续scanf将输入存储在类型的位置,但因为%s格式说明符还添加了终止NULL('')字符。此"NULL"字符将覆盖name中的第一个字符。现在name的第一个字符就是''字符。

解决方案:

修改scanf以读取单个字符scanf(" %c",&genre);(需要%c之前的空间来消耗newline字符(。

genre的声明更改为char genre[2];,以包括MFnewline字符和''

希望这能帮助。。。。。。

void ex19(){
char name[100];
char genre;
printf("Enter your name: ");
scanf("%s", name);
printf("Enter your genre: ");
scanf(" %c", &genre);//ignore whitespace characters and read a character
if (genre == 'M'){
printf("%s you are a BOY", name);
} 
else if (genre == 'F'){
printf("%s is GIRL", name);
}
else {
printf("INVALID GENRE");
}
}

void ex19(){
char name[100];
char genre[2];//declare genre as a character array
printf("Enter your name: ");
scanf("%s", name);
printf("Enter your genre: ");
scanf("%s", &genre);
if (*genre == 'M'){//deference genre...same as genre[0]
printf("%s you are a BOY", name);
} 
else if (*genre == 'F'){//deference genre...same as genre[0]
printf("%s is GIRL", name);
}
else {
printf("INVALID GENRE");
}
}

最新更新