2013-12-12 2 views
-1

Эй, ребята, работая над кодом здесь, и я как бы проиграл.Поиск строки в txt-файле и отображение строки

int main() 
{ 

    FILE *fp; 
    struct info 
    { 
     char name[15]; 
     char surename[15]; 
     char gender[15]; 
     char education[15]; 

    } info; 

    char c; 
    int i, j, a; 
    struct info sem; 

    beginning: 

    scanf("%d", &a); 

if(a==1) 
{ 
fp = fopen("info.txt", "r"); 
    for(i=0;!feof(fp);i++) 
{ fscanf(fp, "%s %s %s %s", 
       sem.name, 
       sem.surname, 
       sem.gender, 
       sem.education,); 
       printf("%s, %s, %s, %s\n", 
       sem.name, 
       sem.surname, 
       sem.gender, 
       sem.education,); 
    } 
     fclose(fp); 
    goto beginning; 
    } 
    if (a == 2) 

    { 
     FILE *fp = fopen("info.txt", "r"); 
     char tmp[256] = { 0x0 }; 
     while (fp != NULL && fgets(tmp, sizeof(tmp), fp) != NULL) 

     { 

      if (strstr(tmp, "bachelors")) 

       /* Code works fine until this part */ 

       fprintf(fp, "\n%s %s %s %s %s %s", 
         sem.name, sem.surname, sem.gender, sem.education,); 

     } 
     if (fp != NULL) 
      fclose(fp); 
     goto beginning; 
    } 

После нахождения строки «холостяк» он должен PRINTF остальную часть строки, где он нашел его, в этом случае имя, фамилия и т.д. и т.п. от пользователя найден со степенью бакалавра, но это не делает, если кто-то может указать на моя ошибка, id будет очень большой!

+2

Похоже, что вы не присваиваете слово 'sem', но вы печатаете членов' sem', ожидая, что он что-то будет содержать. – lurker

+0

Нет, не страшный 'goto'! –

+0

Извините, что забыл добавить эту часть кода также – user3043290

ответ

0

Выполните следующие действия: 1. Пересмотреть на структурах 2. Избавьтесь от GOTO в вашем коде (его плохой стандарт программирования) 3. правильного кода отступы

Перейти через код ниже

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

int main() 
{ 
    struct info 
    { 
     char name[15]; 
     char surname[15]; 
     char gender[15]; 
     char education[15]; 

    } sem; 

    FILE *fp=NULL; 
    int i, a; 
    char tmp[256] = {0x0}; 

    while(1) 
    { 
     printf("Enter the value\n"); 
     scanf("%d", &a); 

     if((fp = fopen("info.txt", "r")) != NULL) 
     { 

      switch(a)  // assuming your code is just an snippet and actual code has more than 2 conditions 
      {    // use if-else if just 2 condition checks 

       case 0: 
         exit(0);  // quit the program 

       case 1: 

        for(i=0;!feof(fp);i++) 
        { 
         fscanf(fp, "%s %s %s %s", sem.name, sem.surname, sem.gender, sem.education); 
         printf("%s, %s, %s, %s\n",sem.name,sem.surname,sem.gender,sem.education); 
        } 

        break; 

       case 2: 

        while (fgets(tmp, sizeof(tmp), fp) != NULL) 
        { 
         if (strstr(tmp, "bachelors")) 
         { 
          /* Code works fine until this part */ 
          fprintf(fp, "\n%s %s %s %s", sem.name, sem.surname, sem.gender, sem.education);       
         } 
        } 

        break; 

       default: printf("Default statement");           
      } 

      fclose(fp); 

     } 
    } 
} 
+0

'while (fgets (tmp, sizeof (tmp), fp)! = NULL)' также не кажется необходимым, вы можете сделать только «fgets» и продолжить – nimish

Смежные вопросы