2013-03-10 93 views
0

我們被要求用C編寫一定的方案,使用戶能夠如何在C中搜索結構中的成員並打印所有成員?

  • 添加一個學生
  • 查看所有的學生
  • 搜索一個學生和出口

與結構的使用。該計劃應該像學生的門戶一樣行事。 我有這個'暫定代碼',當編譯時,會打印一個錯誤的分段錯誤(核心轉儲)。所以這是我的代碼怎麼一回事:

#include<stdio.h> 

typedef struct tag1{ 
    int day, year, month; 
}Date; 

typedef struct tag2{ 
    int number; 
    char name[50]; 
    char course[30]; 
    Date birthday; 
}Record; 



main(){ 
    int choice, n, i=0; 
    Record student[200]; 

    //printing of menu: 
    printf("Choose from the menu:\n"); 
    printf("  [1] Add Student\n"); 
    printf("  [2] Search Student\n"); 
    printf("  [3] View All\n"); 
    printf("  [4] Exit\n"); 
    scanf("%d", &choice); 


    if((choice>=1)&&(choice<=4)){ 
     if(choice==1){ 

      printf("Enter student number:\n"); 
      scanf("%d", &student[n].number);  

      printf("Enter the name of the student:\n");  
      scanf("%[^\n]", student[n].name); 

      printf("Enter month of birth:\n"); 
      scanf("%d", &student[n].birthday.month); 

      printf("Enter day of birth:\n"); 
      scanf("%d", &student[n].birthday.day); 

      printf("Enter year of birth:\n"); 
      scanf("%d", &student[n].birthday.year); 

      printf("Enter course:\n"); 
      scanf("%[^\n]", student[n].course); 

      n++; 
     } 
     if(choice==2){ 
     while(i<n){ 
      printf("%d\n", student[n].number); 
      printf("%s", student[n].name); 
      printf("%d/%d/%d", student[n].birthday.month, student[n].birthday.day,student[n].birthday.year); 
      printf("%s", student[n].course); 
      i++; 
      } 
     } 
     } 


    } 

我只是中途因爲我有我將如何爲學生尋找不知道。希望你對我有任何改進我的代碼的建議。

+0

段錯誤發生在哪裏?你可以運行調試器來找出答案嗎? – Floris 2013-03-10 04:50:41

回答

0

你忘了初始化n(你可能想要n = 0)。

1

假設,您使用i迭代學生,直到達到第n個元素。

所以應該student[i]student[n]

這應該工作:

//... 

while(i<n){ 

     Record current = student[i]; 

     printf("%d\n", current.number); 
     printf("%s", current.name); 
     printf("%d/%d/%d", current.birthday.month, 
        current.birthday.day, 
        current.birthday.year); 
     printf("%s", current.course); 

     i++; 
} 

是的,正應被初始化爲0。

0

* 要secrh的學生,你可以使用像這樣*

int sno; 
unsigned char flag=0; 
printf("Enter student number to search :"); 
scanf("%d",&sno); 


然後搜索此記錄到所有記錄,當它匹配任何記錄時,顯示該記錄。

for(i=0;i<n;i++) // where n is maximum number of records 
{ 
    if(student[i].number == sno) 
    { 
     flag=1; 
     /*** print all the member of student[i] ****/ 
     break; 
    } 
} // end of for loop 
if(0==flag) { printf("\nSorry !!! Record not found with student number : %d\n",sno); }