有一个我不知道的错误

时间:2016-11-07 12:48:18

标签: 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;

}

这是我的计划。我想问性别并随机给出他们的名字。如果是男性则有五个名字,如果是女性则有五个名字。但它一直在说 !表达必须是可识别的1值! 我无法理解。请有人帮帮我!!! 另外,我想知道如何在c中等待,我想在“加载”之后等待。

4 个答案:

答案 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;

}