#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 включает в себя новую строку в конце.