#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
char names[10][10], name[10], gender;
printf("Welcome to Autumn sim");
names = ["Nathan", "August", "Bob", "Joe", "Stewart", "Martha", "Tiffany", "Darlene", "Kate", "Sophie"];
printf("What is your gender? m or f?\n");
scanf("%c", &gender);
if (gender == "m" || "M")
{
name = names[rand(0, 4)][10];
}
else if (gender == "F" || "f")
{
name = names[rand(5, 9)][10];
}
printf("Your name is...");
printf("Loading");
printf("%s", name);
return 0;
}
这是我的计划。我想问性别并随机给出他们的名字。如果是男性则有五个名字,如果是女性则有五个名字。但它一直在说 !表达必须是可识别的1值! 我无法理解。请有人帮帮我!!! 另外,我想知道如何在c中等待,我想在“加载”之后等待。
答案 0 :(得分:2)
您无法将分配给数组,只能复制到该数组。 或在定义数组时初始化它。
简单的解决方案是初始化数组:
char names[10][10] = {
"Nathan", "August", "Bob", "Joe", "Stewart",
"Martha", "Tiffany", "Darlene", "Kate", "Sophie"
};
您的比较也存在问题,例如: gender
。变量gender
是字符,因此您需要将其与另一个字符进行比较。字符文字使用单引号而不是双引号。所以字符 m
是'm'
(不是"m"
这是一个字符串)。
然后逻辑错了。表达式gender == 'm' || 'M'
实际上等于gender == ('m' || 'M')
,这意味着您将gender
与'm' || 'M'
的结果进行比较。表达式'm' || 'M'
将始终为1
,因此比较将失败。您需要明确地将gender
与'm'
和'M'
进行比较,如同gender == 'm' || gender == 'M'
。
或者您可以使用tolower(gender) == 'm'
等tolower
功能。
要从您的名称数组中获取单个名称,您有两个选择。一种是继续使用数组name
,但由于您可以分配给数组,因此必须复制。要复制字符串,通常使用strcpy
函数:
strcpy(name, names[1]); // Copy the second name
另一种可能是使用指针,因此您将name
声明为指向char
的指针:
char *name;
然后你可以指向names
数组中的任何元素:
name = names[1]; // Make name point to the second name
你应该使用哪一个取决于你在做什么。如果你只想显示字符串,那么任何一个都可以正常工作。如果要修改字符串,而不修改names
中的字符串,则应使用数组。
最后,您的代码还有另一个问题。 rand
函数无法正常工作。
参见例如this old answer如何生成范围内的随机数。
答案 1 :(得分:2)
您的代码中有很多错误...
names
但不指定类型。
char
(性别)与"m"
进行比较,双引号表示char *
值。 if (gender == "m" || "M")
,这意味着如果性别等于“m”,或者“M”有一个值(不等于零),那么它就是,所以条件总是为真name = names[rand(0, 4)][10];
,name
的类型是什么,names[rand(0, 4)][10]
的类型是什么? rand
的男人,你没有正确使用它。
尝试解决这些问题,这应该会更好;)
答案 2 :(得分:0)
问题在于
names = ["Nathan", "August", "Bob", "Joe", "Stewart", "Martha", "Tiffany", "Darlene", "Kate", "Sophie"];
您无法分配到&#34;数组&#34;类型,语法也错了。
你必须
答案 3 :(得分:0)
有很多方法可以实现这一目标。这是其中一种方式。
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
char name[10] = "";
char gender = ' ';
printf("Welcome to Autumn sim");
char names[10][10] = ["Nathan", "August", "Bob", "Joe", "Stewart", "Martha", "Tiffany", "Darlene", "Kate", "Sophie"];
printf("What is your gender? m or f?\n");
scanf("%c", &gender);
if (gender == 'm' || gender == 'M') //Compare gender with charecter ('m' OR 'f')
{
strcpy(name, names[rand(0, 4)]); //Copy the string
}
else if (gender == 'F' || gender == 'f')
{
strcpy(name, names[rand(5, 9)]);
}
else
{
printf("Invalid gender entered") //Check if input is invalid
}
if(0 < strlen(name)) //Print only if input is valid
{
printf("Your name is...");
printf("Loading");
usleep(1000*1000*1000); //1s sleep
printf("%s", name);
}
return 0;
}