如何在各自的课程中显示学生姓名

时间:2015-03-18 14:19:40

标签: c

我在显示学生姓名时遇到了麻烦 他们各自的课程......这是我唯一的问题 有... ...

非常感谢

#include <stdio.h>
#include <stdlib.h>
#define p printf
#define s scanf
struct stud
{
  char name[50];
  char course1[50];
  char course2[50];
  char course3[50];
  char course[50];
  int course_code;
}c[5];
int main(int argc, char *argv[])
{
  int input_code,i,bsit_list=0,bscpe_list=0,bscs_list=0;

  for (i=0; i<5; i++)
  {
    strcpy(c[i].course1,"BSIT");
    strcpy(c[i].course2,"BSCPE");
    strcpy(c[i].course3,"BSCS");

    p("\n[%d] Enter Student Name: ",i+1);
    s("%s",c[i].name);
    p("   [1] %s",c[i].course1);
    p("\n   [2] %s",c[i].course2);
    p("\n   [3] %s",c[i].course3);
    p("\nEnter Student Code: ");
    s("%d",&input_code);

    if (input_code==1)
     {
       bsit_list++;
       strcpy(c[i].course,"BSIT");
     }
    else if (input_code==2)
     {
       bscpe_list++;
       strcpy(c[i].course,"BSCPE");
     }
    else if (input_code==3)
     {
       bscs_list++;
       strcpy(c[i].course,"BSCS");
     }
   }

  p("\nBSIT Students");
  for (i=0; i<input_code==1; i++)
   {
     p("\nName: %s",c[i].name); `<----- This is where my problem starts`
   }
  p("\nCount: %d",bsit_list);

  p("\n\nBSCPE Students");
  for (i=0; i<input_code==2; i++)
   {
     p("\nName: %s",c[i].name);   `<----- Also this`
   }
  p("\nCount: %d",bscpe_list);

  p("\n\nBSCS Students");
  for (i=0; i<input_code==3; i++)
   {
     p("\nName: %s",c[i].name);   `<----- And this`
   }
  p("\nCount: %d",bscs_list);

  getch();
} 

2 个答案:

答案 0 :(得分:1)

我认为你的问题在这里

p("\nBSIT Students");
for (i=0; i<input_code==1; i++)
          |--------------|
   {
     p("\nName: %s",c[i].name); `<----- This is where my problem starts`
   }

你想要的是

p("\nBSIT Students");
for (i=0; i<5; i++)                  //iterate over all the students
   {
     if(!strcmp(c[i].course, c[i].course1)) //check for the match
     printf("Name: %s\n",c[i].name);
   }

其他课程也类似。

注意:我更喜欢printf()scanf()而不是p()s()。 YMMV。

答案 1 :(得分:0)

首先,正如大家所建议的,printf()scanf()更好。

我注意到你的结构中有一个你没有使用的变量course_code,所以我用它来存储每个学生的item_code

现在,i<item_code==1是错误的 您需要的是i<5(因为学生人数是5),然后在输出名称之前只需使用if( c[i].course_code == 1 )语句。

以下是您的代码的固定版本(仅我更改的部分)

    c[i].course_code = input_code;      // the cource_code is assigned
    if ( input_code == 1 )
     {
       bsit_list++;
       strcpy( c[i].course , "BSIT" );
     }
    else if ( input_code == 2 )
     {
       bscpe_list++;
       strcpy( c[i].course , "BSCPE" );
     }
    else if ( input_code == 3 )
     {
       bscs_list++;
       strcpy( c[i].course , "BSCS" );
     }
  }

  p("\nBSIT Students");

  for ( i = 0 ; i < 5 ; i++ )
    {
       if( c[i].course_code == 1 )       // this if statement is what is required
         p("\nName: %s",c[i].name); 
    }
  p("\nCount: %d",bsit_list);


  p("\n\nBSCPE Students");

  for ( i = 0 ; i < 5 ; i++ )
   {
     if( c[i].course_code == 2 )       // this if statement is what is required
        p("\nName: %s",c[i].name);   
   }
  p("\nCount: %d",bscpe_list);


  p("\n\nBSCS Students");

  for ( i = 0 ; i < 5 ; i++ )
   {
     if( c[i].course_code == 3 )       // this if statement is what is required
        p("\nName: %s",c[i].name);   
   }
  p("\nCount: %d",bscs_list);