сравнить fgets с пользовательским вводом - PullRequest
0 голосов
/ 04 декабря 2010

Можете ли вы помочь мне с моим кодом?Я хочу создать программу, которая определит, использовался ли уже идентификатор студента, я могу сравнить их один раз ... но я хочу, чтобы сравнение проводилось каждый раз, когда пользователь вводит другой идентификатор студента, так что ... программабудет знать, если пользователь вводит другой использованный идентификатор, я знаю, что мне нужно иметь цикл перед "Ввести идентификатор студента:" ... но все еще трудно подумать об условиях, или если у вас есть лучшие решения ...я был бы счастлив, используя это .. ребята, это мой код:

#include<stdio.h>
#include<stdlib.h>
struct studentinfo{
       char id[8];
       char name[30];
       char course[5];
}s1;
main(){
    int i=0;
    int count=0;
    char arr[50];
    FILE *stream = NULL;
    stream = fopen("studentinfo.txt", "a+");    
    struct studentinfo *array[50];

    array[i] = (struct studentinfo*) malloc(sizeof(struct studentinfo));

          printf("Enter Student ID: ");
          scanf("%s", array[i]->id);
          fflush(stdin);
          while(!feof(stream)){ 
            fgets(arr, 6, stream);
             if(strcmp(arr, array[i]->id)==0){
             printf("Student ID is used!\n");
             free(array[i]);
          }
       }
          printf("Enter Student Name: ");
          gets(array[i]->name);
          fflush(stdin);
          printf("Enter Student Course: ");
          scanf("%s", array[i]->course);

          fprintf(stream, "\n%s,\t%s,\t%s", array[i]->id, array[i]->name, array[i]->course);
          i++;

       fclose(stream);
       i=0;//for freeing the space
       if(array[i] != NULL){
       free(array[i]);
       }
    getch();
}

1 Ответ

0 голосов
/ 04 декабря 2010

я посоветовал использовать функцию goto ... и это решило проблему, но я немного волновался, потому что может быть ошибка, с которой я еще не сталкивался, это мой новый код:

#include<stdio.h>
#include<stdlib.h>
struct studentinfo{
       char id[8];
       char name[30];
       char course[5];
}s1;
main(){
    int i=0;
    int count=0;
    char arr[50];
    FILE *stream = NULL;
    stream = fopen("studentinfo.txt", "a+");    
    struct studentinfo *array[50];

    array[i] = (struct studentinfo*) malloc(sizeof(struct studentinfo));
          studid:
          printf("Enter Student ID: ");
          scanf("%s", array[i]->id);
          fflush(stdin);
          while(!feof(stream)){ 
            fgets(arr, 6, stream);
             if(strcmp(arr, array[i]->id)==0){
             printf("Student ID is used!\n");
             goto studid;
             }
          }
          printf("Enter Student Name: ");
          gets(array[i]->name);
          fflush(stdin);
          printf("Enter Student Course: ");
          scanf("%s", array[i]->course);

          fprintf(stream, "\n%s,\t%s,\t%s", array[i]->id, array[i]->name, array[i]->course);
          i++;

       fclose(stream);
       if(array[i] != NULL){
       free(array[i]);
       }
    getch();
}

любые другие лучшие решения thnx ^ _ ^

...