Динамический ввод значений в структуру и печать этих значений

#c #loops #struct

#c #циклы #структура

Вопрос:

Я написал этот код для structure study, который будет вводить количество студентов, запись которых должна быть сохранена, а затем печатать то же самое. Я не уверен, где именно я ошибаюсь.

 #include<stdio.h>
struct stud{
int id;
char name[50];
float points;
}s[1000];

int main(){

     int i,n;
     scanf("%d",amp;n);

     for(int i=0;i<n;i  ){
         scanf("%d",amp;s[i].id);
         scanf("%c",s[i].name);
         scanf("%f",amp;s[i].points);
        }
       
       for(i=0;i<n;i  ){
           printf("ID: %dn",s[i].id);
           printf("First Name: %cn",s[i].name);
           printf("Points: %fn",s[i].points);
        }

       return 0;
 }
  

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

1. scanf("%c",s[i].name); — почему вы читаете только один символ в имени?

Ответ №1:

Изменить

  scanf("%c",s[i].name);
  

по крайней мере, для

  scanf("Is",s[i].name);
  

и то же самое для printf() вызова также. %c для одного char , для строки, вам понадобится %s . Кроме того, не забудьте проверить возвращаемое значение scanf() на успех.

При этом лучше использовать fgets() для пользовательского ввода. Что-то вроде

   if( fgets (s[i].name, sizeof(s[i].name), stdin) != NULL ) { /*......*/ }
  

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

1. спасибо, это сработало, причина, по которой я использовал идентификатор %c, заключается в том, что я всегда немного путаюсь между строками и символами, я знаю, что строки не существуют в C, поэтому я всегда думаю, что определение массива символов должно решить эту проблему.