Занести строку с пробелами в поле структуры - C (СИ)
Формулировка задачи:
Собственно вопрос в названии темы. Как сделать так, чтобы вводимая строка с пробелами, нормально заносилась в поле структуры?! Вот написал небольшую программу на ввод/вывод массива структур "билеты":
Но почему, когда в поле Tickets[].name вводится строка с пробелами, то программа начинает работать некорректно?! Пожалуйста, подскажите как избежать етого.
#include <stdio.h>
int main(int argc, char *argv[])
{
typedef struct {
char name[31];
char date[10];
char times[10];
int row;
int place;
}Ticket;
int q;
printf("input the initial quantity of tickets:\n");
scanf("%d",&q);
Ticket Tickets[q];
printf("input information about tickets:\n");
for (int i=0;i<q;i++)//input of massiv
{printf("input information about %d ticket:\n",i+1);
printf("name of show: ");scanf("%s",&Tickets[i].name);
printf("date of show [input format: DD.MM.YYYY]: ");scanf("%s",&Tickets[i].date);
printf("time of show: ");scanf("%s",&Tickets[i].times);
printf("number of row: ");scanf("%d",&Tickets[i].row);
printf("number of place: ");scanf("%d",&Tickets[i].place);}
printf("\n");
for (int i=0;i<q;i++)//output of massiv
{printf("information about %d ticket:\n",i+1);
printf("name of show: ");printf("%s",Tickets[i].name);printf("\n");
printf("date of show: ");printf("%s ",Tickets[i].date);printf("\n");
printf("time of show: ");printf("%s ",Tickets[i].times);printf("\n");
printf("number of row: ");printf("%d ",Tickets[i].row);printf("\n");
printf("number of place: ");printf("%d ",Tickets[i].place);printf("\n");
printf("\n");}
return 0;
}Решение задачи: «Занести строку с пробелами в поле структуры»
textual
Листинг программы
#include <stdio.h>
int main(int argc, char *argv[])
{
typedef struct {
char name[31];
char date[10];
char times[10];
int row;
int place;
}Ticket;
int q=0;
printf("input the initial quantity of tickets:\n");
scanf("%d",&q);
Ticket Tickets[q];
printf("input information about tickets:\n");
for (int i=0;i<q;i++)//input of massiv
{printf("input information about %d ticket:\n",i+1);
printf("name of show: ");fgets(Tickets[i].name,sizeof(Tickets[i].name),stdin);
printf("date of show [input format: DD.MM.YYYY]: ");fgets(Tickets[i].date,sizeof(Tickets[i].date),stdin);
printf("time of show: ");fgets(Tickets[i].times,sizeof(Tickets[i].times),stdin);
printf("number of row: ");scanf("%d%*c",&Tickets[i].row);
printf("number of place: ");scanf("%d%*c",&Tickets[i].place);}
printf("\n");
for (int i=0;i<q;i++)//output of massiv
{printf("information about %d ticket:\n",i+1);
printf("name of show: ");puts(Tickets[i].name);
printf("date of show: ");puts(Tickets[i].date);
printf("time of show: ");puts(Tickets[i].times);
printf("number of row: ");printf("%d ",Tickets[i].row);printf("\n");
printf("number of place: ");printf("%d ",Tickets[i].place);printf("\n");
printf("\n");}
return 0;
}