Как добавить строку в структуру с помощью функции? - PullRequest
2 голосов
/ 13 апреля 2020

Я сделал систему парковки, где я вводил информацию об автомобилях, используя функцию void. Но я не знаю, как поместить строки в структуру с помощью void.

А вот мой код. Где моя ошибка?

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

struct car {
  char plate[10];
  char model[20];
  char color[10];
};

void main() {

  struct car c[4];

  AddCar(c[0], "43ds43", "ford", "blue");
  ShowCar(c[0]);

  return 0;
}
// I guess my mistake is here
void AddCar(struct car c, char p[10], char m[10], char r[10]) {
  strcpy(c.plate, p);
  strcpy(c.model, m);
  strcpy(c.color, r);
}

void ShowCar(struct car c) {
  printf("Plate: %s   Model: %s  Color: %s\n-------", c.plate, c.model, c.color);
}

Ответы [ 2 ]

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

В вашем коде есть ряд ошибок! Чтобы обратиться к «другим» первым:

  1. Вам необходимо предоставить прототипы функций для AddCar и ShowCar, прежде чем использовать их, или компилятор предположит, что они возвращают int и затем жаловаться, когда видит фактические определения.
  2. Ваша main функция (правильно) возвращает 0, но она объявлена ​​как void - поэтому измените ее на int main(...).

И «реальная» проблема: вы передаете структуру car в AddCar по значению - что означает, что копия сделана, а затем передана к функции. Изменения в этой копии не влияют на переменную в вызывающем модуле (то есть в main). Чтобы это исправить, вам нужно передать указатель в структуру car и использовать оператор -> (вместо оператора .) в этой функции.

Вот «исправленная» версия вашего кода с добавленными комментариями, где я внес значительные изменения:

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

struct car {
    char plate[10];
    char model[20];
    char color[10];
};

// Add your functions' prototypes before you use them...
void AddCar(struct car *c, char p[10], char m[10], char r[10]);
void ShowCar(struct car c);

int main() // If you return an int, you must declare that you do!
{
    struct car c[4];
    // Here, we pass a pointer to `c[0]` by adding the `&` (address of)...
    AddCar(&c[0], "43ds43", "ford", "blue");
    ShowCar(c[0]);
    return 0;
}

void AddCar(struct car *c, char p[10], char m[10], char r[10])
{                   // ^ To modify a variable, the function needs a POINTER to it!
    strcpy(c->plate, p);
    strcpy(c->model, m);  // For pointers to structures, we can use "->" in place of "."
    strcpy(c->color, r);
}

void ShowCar(struct car c)
{
    printf("Plate: %s   Model: %s  Color: %s\n-------", c.plate, c.model, c.color);
}

Не стесняйтесь просить дальнейших разъяснений и / или объяснений.

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

Вы копируете struct car c. Передайте его как указатель:

 AddCar(&c[0], "43ds43", "ford", "blue");
 // ...
 void AddCar(struct car *c,char p[10],char m[10],char r[10]) {
    strcpy(c->plate,p);
    strcpy(c->model,m);
    strcpy(c->color,r);
 }
...