Я немного изменил ваш код.Это рабочая версия кода.
Код
#include <stdio.h>
struct student
{
char sname[20];
int srollno;
int smarks[3];
};
int main ()
{
struct student e[3];
int i,j;
for (i=0;i<=2;i++)
{
printf("Name: ");
scanf("%s", e[i].sname);
printf("roolNumber: ");
scanf("%d", &e[i].srollno);
for (j=0;j<=2;j++)
{
printf("Mark %d: ",j);
scanf("%d", &e[i].smarks[j]);
}
}
printf("\n\nprinting \n\n");
for (i=0;i<=2;i++)
{
printf("Name: %s\n", e[i].sname);
printf("roolNumber: %d\n", e[i].srollno);
for (j=0;j<=2;j++)
{
printf("Mark: %d\n", e[i].smarks[j]);
}
printf("\n");
}
}
Компиляция и запуск
gcc -Wall source.c -o source
. / Source
Я предлагаю использовать printf()
перед попыткой scanf()
,это делает интерфейс пользователя лучше.
scanf()
массив символов не нуждается в операторе &
(адрес). смотри это
char str[10];
scanf("%s", str);
printf("%s\n", str);
Работает точно так же, как
char str[10];
scanf("%s", &str[0]);
printf("%s\n", str);
Поскольку str
- указатель на свой первый элемент str[0]
.Как указано в ссылке, мы можем написать printf("%d\n", str==&str[0]);
, и всегда результатом будет то, что str и & str [0] идентичны.