c有一个我不知道的错误


#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;
}

最新更新