【发布时间】:2021-07-24 05:05:41
【问题描述】:
我目前正在学习c,然后我在玩函数和数据类型,特别是在本例中char[]。
我编写的以下代码声明了一个名为 verifyMessage() 的函数并接收两个参数,name 和 gender。
当我执行该函数时,我传递了用户通过控制台输入的两个参数,但是当我打印name 时它什么也不打印。
#include <stdio.h>
int main() {
int i = 0;
double controlNumber = 21200164;
double number = 0;
char name[50];
char gender[1];
int attempts = 5;
int aux = 0;
do {
printf("Introduzca el numero de control: ");
scanf("%lf", &number);
if (controlNumber == number) {
printf("\nWrite your name: ");
scanf("%s", name);
printf("\nWrite your gender (M/F): ");
scanf("%s", gender);
verifyMessage(name, gender);
break;
} else {
i++;
}
} while (i < attempts);
return 0;
}
void verifyMessage(char name[50], char gender[1]) {
if ('M' == gender[0]) {
printf("\n\Name: %s", name);//Here doesn´t print the name
printf("\nMen");
} else if ('F' == gender[0]) {
printf("\nWoman");
} else {
printf("\nInvalid gender");
}
}
【问题讨论】:
-
长度为 1 的数组有点毫无意义。甚至不要打扰。
-
char gender[1];至少需要为char gender[2];。 C 中的字符串有一个 NUL 终止符。因此,单个字母字符串需要存储两个字符。您当前有缓冲区溢出,因此存在未定义的行为。 -
另一种方法是使用
char gender;而不是数组。 -
@Barmar ... 和
scanf(" %c", &gender);而不是scanf("%s", gender); -
@MikeCAT 我把它留给学生作为练习......
标签: c function char scanf do-while