簡體   English   中英

有一個我不知道的錯誤

[英]There is an error that I don't know

#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中等待,我想在“加載”之后等待。

您不能分配給數組,只能復制到該數組。 在定義數組時對其進行初始化。

簡單的解決方案是初始化數組:

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') ,這意味着您將gender'm' || 'M'的結果進行比較 'm' || 'M' 表達式'm' || 'M' 'm' || 'M'始終1 ,因此比較將失敗。 您需要明確地將gender'm''M'gender == 'm' || gender == '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但不指定類型。
  • 您比較性別,一個char (性別)與"m" ,雙引號表示一個char *值。
  • 您不能執行if (gender == "m" || "M") ,這意味着性別等於“ m”,或者“ M”具有一個值(不同為零),就是這樣。條件將永遠為真。
  • 在這一行上: name = names[rand(0, 4)][10]; name的類型是什么, name的類型是什么names[rand(0, 4)][10]
  • 您應該閱讀rand ,但使用不正確。



嘗試解決這些問題,這應該會更好地工作;)

問題出在

names = ["Nathan", "August", "Bob", "Joe", "Stewart", "Martha", "Tiffany", "Darlene", "Kate", "Sophie"];

您不能分配給“數組”類型,並且語法也是錯誤的。

你必須

  • 逐元素分配
  • 使用括號括起來的初始化程序列表初始化數組。

有很多方法可以實現這一目標。 這是方法之一。

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

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM