2010-12-03 11 views
1

können Sie mir helfen, meinen Code zu verbessern ... das ist alles über Studenteninformationen ... Ich habe Probleme mit der Syntax ... Im Menü Bearbeiten ... ich versuche mit strcmp aber nichts passiert, ich benutze zuerst fgets und speicher es in einem array und frage dann den benutzer nach einer eingabe und speichere es in einem anderen array .. und dann vergleiche ich ... aber es hat nicht funktioniert .. hoffe du kannst mir helfen. .. das ist mein Code ..Student Info Datei Handhabung

#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(); 
} 

hier ist mein Plan in Bearbeitungsmenü:

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

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

    } 

wird diese Arbeit?

Danke Jungs hoffen, dass Sie mir helfen können^_^

+1

Ist dies Ihre Hausaufgaben? Dann tag Ihre Frage mit home-work tag – fardjad

+2

Haben Sie versucht, den Code selbst laufen, bevor Sie fragen, ob es funktionieren würde? –

+0

das ganze Programm läuft ... es tut bereits Anhängen und Anzeigen der Student Info ... Ich habe Probleme mit dem Bearbeiten und Löschen ... hoffe, Sie können mir helfen :) – iamanapprentice

Antwort

3

fgets() hält die Newline. gets() nicht. Daher werden die Strings niemals übereinstimmen.

Versuchen Sie, das Handbuch für eine Funktion zu lesen, wenn Sie nicht vollständig sicher sind, was es tut.

Statt gets(arr2) versuchen, fgets(arr2, 100, stdin) zu tun.

+0

wow ... ich habe etwas gelernt. :) Danke @AlastairG – newbie

+0

Gern geschehen. Möchtest du die Antwort annehmen, indem du auf den leeren Pfeil klickst und vielleicht auf den Pfeil nach oben über der 0 klickst, um anzuzeigen, dass du denkst, dass das eine gute Antwort ist? :) – AlastairG

+0

Ich habe das tägliche Stimmlimit erreicht. Ich klicke es morgen auf – newbie

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

Verwendung

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

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

feof() keinen Fehler sehen beim Lesen, so dass er die Schleife hängen kann