Почему я не могу добавить строку в структуру?

#c #string #struct

Вопрос:

Поэтому я пытаюсь создать программу, которая считывает данные в файл. Но перед этим мне нужно сохранить данные в структуре. Как сохранить строку в структуре?

 #include lt;stdio.hgt; #define MAX 100  int count;  struct cg {  float price;  char singer, song;  int release; } hold[100];  int main() {  while (1) {  printf("Name of band of Singer: ");  scanf_s("%s,", amp;hold[count].singer);   printf("Name of Song: ");  scanf_s("%c", amp;hold[count].song);   printf("Price: ");  scanf_s("%f", amp;hold[count].price);   printf("Year of Release: ");  scanf_s("%d", amp;hold[count].release);   count  ;  printf("n");  } }  

Комментарии:

1. Вместо char singer, song; использования char singer[100], song[200]; для певца до 99 символов и песни до 199 символов.

2. Или рассмотрите возможность использования указателей на динамически выделенные массивы символов.

Ответ №1:

Поскольку вопрос здесь касается хранения строк в a struct , вот простое решение:

 #include lt;stdio.hgt;  #define MAX 100  int count; struct cg {  float price;  char singer[20], song[20];  int release; }hold[100];  int main() {  printf("Name of band of Singer: ");  fgets(hold[0].singer, 20, stdin);  printf("Singer: %sn", hold[0].singer); }  

Эта программа просто демонстрирует сохранение строки в структуре. Здесь 20 указано максимальное количество символов (включая окончание NUL ), которые вы можете хранить в singer или song . При необходимости вы также можете динамически выделять память, используя malloc() ее для хранения строк.

Пожалуйста, обратите внимание на несколько других проблем с вашей программой. Например, ваш цикл никогда не заканчивается, и a } отсутствует.

Комментарии:

1. Спасибо, что ответили на мой вопрос. Исходный код был намного длиннее, и я скопировал только тот раздел, в котором мне нужна была помощь. Для других переменных я могу просто использовать scanf, верно?

2. Избегайте смешивания fgets и scanf. Также напомним, что fgets включает в себя новую строку в конце.