#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;
}
这是我的程序。我试着询问性别并随机给出他们的名字。男性有5个名字,女性有5个名字。但它一直在说表达式必须是可识别的1值!我无法理解。拜托谁帮帮我!!另外,我想知道如何在c中等待,我想在"加载"后等待。
你的代码中有很多错误…
- 首先使用
names
,但不指定类型。 - 比较性别,
char
(性别)与"m"
,双引号表示char *
值。 - 你不能做
if (gender == "m" || "M")
,这意味着如果性别等于"m",或者"m"有一个值(不同于零),它是,所以条件将始终为真。 - 这一行:
name = names[rand(0, 4)][10];
,name
是什么类型,names[rand(0, 4)][10]
是什么类型? - 你应该看看
rand
的说明,你没有正确使用它。
尝试修复这些问题,这应该工作得更好;)
你不能分配给一个数组,只能复制到它。或者在定义数组时初始化。
简单的解决方案是初始化数组: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
函数,如tolower(gender) == 'm'
。
要从名称数组中获得单个名称,有两种选择。一种方法是继续使用数组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
函数不像您期望的那样工作。
问题在
names = ["Nathan", "August", "Bob", "Joe", "Stewart", "Martha", "Tiffany", "Darlene", "Kate", "Sophie"];
不能赋值给"array"类型,语法也错误。
你必须要么
- 按元素分配元素
- 使用大括号括起来的初始化列表初始化数组。
有很多方法可以做到这一点。这是其中之一。
#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;
}