#include <stdio.h>
#include <stdlib.h>
struct the_struct
{
char FirstName[20];
char LastName[32];
int Score[20];
};
int main ()
{
int i,n;
struct the_struct *ptr[100];
printf("how many students?\n");
scanf("%d",&n);
while (i<=n);
{
i==0;
ptr[i] = malloc(sizeof(struct the_struct));
printf("Enter First Name \n");
scanf("%s",ptr[i]->FirstName);
printf("Enter Last Name \n");
scanf("%s",ptr[i]->LastName);
printf("Enter Score? \n");
scanf("%s",ptr[i]->Score);
printf("%s %s %s\n",ptr[i]->FirstName,ptr[i]->LastName,ptr[i]->Score);
i++;
}
}
嘿伙计们,所以当我输入第一个输入时,它只进行一次而没有继续用户输入的数字,我尝试了for循环,但结果相同。
还在学习C,所以如果我误解了某些事情我会道歉。
提前致谢。
答案 0 :(得分:1)
问题是i
未初始化。因此,循环while (i <= n)
具有未定义的行为,并且可以随时结束。
添加int i = 0
初始化程序以解决此问题。
注意:
i == 0
表达式无效i
从零开始,您的while
循环应该是while (i < n)
,而不是<=
。scanf
的结果,看看用户是否输入了有意义的内容scanf("%31s",ptr[i]->LastName);
这可以防止缓冲区溢出。答案 1 :(得分:1)
你的while循环有问题。您可以将其重写为:
for (i = 0; i < n; ++i)
{
ptr[i] = malloc(sizeof(struct the_struct));
printf("Enter First Name \n");
scanf("%s",ptr[i]->FirstName);
printf("Enter Last Name \n");
scanf("%s",ptr[i]->LastName);
printf("Enter Score? \n");
scanf("%s",ptr[i]->Score);
printf("%s %s %s\n",ptr[i]->FirstName,ptr[i]->LastName,ptr[i]->Score);
}
由于您使用%s
来阅读和打印Score
,因此您应将其声明为char Score[20];
而不是int
。