2010-12-03 50 views
1

你能幫我提高我的代碼......這是關於學生信息......我在語法上遇到了麻煩......在編輯菜單中...我嘗試使用strcmp,但沒有任何反應,我首先使用fgets並將其存儲在一個數組中,然後詢問用戶輸入並將其再次存儲在另一個數組中..然後我會比較...但它沒有工作..希望你能幫助我。 ..這是我的代碼..學生信息文件處理

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

struct student{ 
     char name[30]; 
     char id[8]; 
     char course[5]; 
}; 

int main(void){ 
    int option =0; 

    while(option!=6){ 
     system("cls"); 
     printf("Menu:\n"); 
     printf("[1] Add Student.\n"); 
     printf("[2] Display Student.\n"); 
     printf("[3] Delete Student.\n"); 
     printf("[4] Delete Student.\n"); 
     printf("[5] Exit.\n"); 
     scanf("%d",&option); 

     switch(option) 
     { 
      case 1: 
       addStudent(); 
       break; 
      case 2: 
       displayinfo(); 
       break; 
      case 3: 
       break; 
      case 4: 
       break; 
      default: 
       printf("That is not in the options!\nPlease Try again!\n"); 
       break; 
     } 

    } 
} 

addStudent(){ 
    int i; 
    FILE *stream = NULL; 
    stream = fopen("studentinfo.txt", "a+"); 

    struct student s1; 
    struct student array[3];//here i wnt 2 apply d malloc but, still didn't know how 2start 
    for (i =0; i<1; i++){ 

     printf("Enter Student ID: "); 
     scanf("%s", s1.id); 
     fflush(stdin); 
     printf("Enter Student Name: "); 
     gets(s1.name); 
     fflush(stdin); 
     printf("Enter Student Course: "); 
     scanf("%s", s1.course); 

     fprintf(stream, "\n%s,\t%s,\t%s", s1.id, s1.name, s1.course); 
    } 
     fclose(stream); 
    getch(); 
} 
displayinfo(){ 
    FILE *stream = NULL; 
    stream = fopen("studentinfo.txt", "rt"); 

    char arr[100]; 
    int i=0; 

    while(!feof(stream)){ 
    fgets(arr, 100, stream); 
    printf("%s", arr); 
    } 

    fclose(stream); 
    getch(); 
} 

這是我在編輯菜單計劃:

 printf("enter details: "); 
    gets(arr2); 

    while(!feof(stream)){ 
     fgets(arr, 100, stream); 
     if(strcmp(arr, arr2)==0){ 
      //code here 
     } 

    } 

將這項工作?

感謝球員希望你能幫助我^ _^

+1

這是你的功課?然後用家庭作業標籤標記您的問題 – fardjad 2010-12-03 10:50:39

+2

您是否在嘗試運行代碼之前詢問它是否可行? – 2010-12-03 10:53:11

回答

3

fgets()保持換行符。 gets()不。因此這些字符串永遠不會匹配。

嘗試閱讀函數的手冊,如果你不完全確定它在做什麼。

而不是gets(arr2)嘗試做fgets(arr2, 100, stdin)

1
while(!feof(stream)){ 
    fgets(arr, 100, stream); 

使用

while(fgets(arr, 100, stream) != NULL) { 
    ... 
} 

if (ferror(stream)) 
    printf("error in file" "\n"); 

FEOF()將不會看到在讀取錯誤,所以可能掛環