Как изменить значение массива Char в c? - PullRequest
0 голосов
/ 08 апреля 2020

Я хочу изменить значение данных char / * Ошибка при изменении значения по умолчанию. Есть ли другой способ * /

char name[]="Ronaldo";
int choice='0';

    printf("Select Player");
    printf("1.Messi\n 2.Suarez\n 3.Neymer\n 4.Dembele\n");
    switch(choice)
    case 1:
            printf("Messi is Selected");

            **Error Position**

            name="Messi";
            printf("Player changd to %s",name);
            break;

    case 5:
            printf("Exit");
            name="Muller";
            exit(1)

Изменение имени игрока

Ответы [ 4 ]

2 голосов
/ 08 апреля 2020

1.

name="Messi";

Вы не можете присвоить массиву char строку, если только она не инициализирована, что делается с помощью:

char name[]="Ronaldo";

Вместо использования strcpy() (Заголовок string.h) -> strcpy(name,"Messi");.

Учтите, что массив name должен быть способен содержать новую назначенную строку + нулевой терминатор, который в этом случае предоставляется, потому что строка "Ronaldo" содержит больше символов, чем любой из следующих. Если это не так, вы должны определить name с соответствующим количеством символов или выбрать имя, которое больше, чем кто-либо другой, или программа вызовет переполнение данных в памяти.

2.

Обратите внимание, что оператор switch не имеет смысла, если choice всегда 0, потому что вы никогда не читали ввод для choice.

Также cases к switch не заключены в { и }, что должно привести к ошибке компиляции.

3.

choice инициализируется персонажем. Хотя это допустимо, это не имеет смысла в этом случае и сбивает с толку читателей вашего кода. Скорее используйте int choice = 0;


Исправленный код:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
   char name[]="Ronaldo";
    int choice=0;

    printf("Select Player\n");
    printf("1.Messi\n2.Suarez\n3.Neymar\n4.Dembele\n5.Muller\n\n");

    scanf("%d",&choice);

    switch(choice)
    {

    case 1:
            printf("\nMessi is Selected");
            strcpy(name,"Messi");

            break;


    case 2:
            printf("\nSuarez is Selected");
            strcpy(name,"Suarez");

            break;


    case 3:
            printf("\nNeymar is Selected");
            strcpy(name,"Neymar");

            break;    

    case 4:
            printf("\nDembele is Selected");
            strcpy(name,"Dembele");

            break;    


    case 5:
            printf("\nMuller is Selected");
            strcpy(name,"Muller"); 

            break;               

    default:
            printf("Exit");
            exit(1);
    } 

    printf("\nPlayer changed to %s",name);   
    return 0;
}

Выход:

/a.out
Select Player  
1.Messi      
2.Suarez      
3.Neymar             
4.Dembele 
5.Muller 

2        // Input from User

Suarez is Selected               
Player changed to Suarez      
1 голос
/ 08 апреля 2020

Проблема в том, что

char name[]="Ronaldo";

дает вам массив символов. Это не то, что вам нужно , потому что массив char не допускает простого присваивания. Для массивов символов вам нужно использовать strcpy.

Однако - вам нужен указатель на char - например:

char* name="Ronaldo";

Тогда вы можете сделать простой присваивания, такие как:

char* name="Ronaldo";
printf("My player is %s\n", name);
name = "Eriksen";
printf("My player is %s\n", name);

Можно непосредственно назначить указатель на символ, чтобы указывать на любой строковый литерал.

Кроме того, вы никогда не получите никакого пользовательского ввода.

И обратите внимание этот оператор switch имеет default - как:

switch(choice)
{
    case 1:
        // do some things for input 1
    break;

    case 2:
        // do some things for input 2
    break;

    default:
        // do some things for all other values
    break;
}
0 голосов
/ 08 апреля 2020

В вашем коде есть несколько ошибок:

> char name [] = "Ronaldo";
Это создает массив символов, который должен иметь заданную длину.

> int choice = '0';
Целочисленный тип не может хранить '0'

Сначала исправьте их, а затем предоставьте больше информации о том, что вы ищете.

0 голосов
/ 08 апреля 2020

Вам не хватает main() и многих других вещей ... Это может работать так ...

#include <stdio.h>
#include <string.h>


int main(void){

char name[20] = "Ronaldo";
int choice;

    printf("Select Player:\n\n");
    printf("\t1.Messi\n\t2.Suarez\n\t3.Neymer\n\t4.Dembele\n\n");

    scanf("%d", &choice);

    switch(choice){
    case 1:
            strcpy(name, "Messi");
            printf("\t%s is selected...\n", name);
            break;

    case 2:
            strcpy(name, "Suarez");
            printf("\t%s is selected...\n", name);
            break;

    case 3:
            strcpy(name, "Neymer");
            printf("\t%s is selected...\n", name);
            break;

    case 4:
            strcpy(name, "Dembele");
            printf("\t%s is selected...\n", name);
            break;

    default:
            puts("\tWrong selection");
    }

return(0);

}
...