while循环仅询问用户输入一次

时间:2014-04-27 01:43:03

标签: c

#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,所以如果我误解了某些事情我会道歉。

提前致谢。

2 个答案:

答案 0 :(得分:1)

问题是i未初始化。因此,循环while (i <= n)具有未定义的行为,并且可以随时结束。

添加int i = 0初始化程序以解决此问题。

注意:

    循环开头的
  1. i == 0表达式无效
  2. 由于i从零开始,您的while循环应该是while (i < n),而不是<=
  3. 您应该检查scanf的结果,看看用户是否输入了有意义的内容
  4. 您应该指定读取字符串的数组的大小,例如: 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