Member 13394766 Ответов: 1

Функция отображения не работает


Приведенный ниже код был использован для создания базы данных студентов. Мне дали сделать это в школе.
Единственная проблема, с которой я сталкиваюсь здесь, заключается в том, что моя функция отображения не работает. Я выполнил код и на выходе для функции отображения не выходит должным образом. Даже после достижения последней строки он все еще показывает до тех пор, пока пол не покажет то же самое слово, а затем он заканчивается.
Что я мог понять из этого, так это то, что указатель файла не достигает EOF или, если он достигает функции feof, не может его обнаружить. Пожалуйста помочь.
Спасибо!

Что я уже пробовал:

void
display ()
{
  ptr = fopen ("student.txt", "r");
  rewind (ptr);
  char temp[50];

  while (!feof (ptr))
    {
      printf ("Roll Number: ");
      fscanf (ptr, " %[^\n]", temp);
      printf ("%s\n", temp);

      printf ("Name: ");
      fscanf (ptr, " %[^\n]", temp);
      printf ("%s\n", temp);

      printf ("Address: ");
      fscanf (ptr, " %[^\n]", temp);
      printf ("%s\n", temp);

      printf ("Gender: ");
      fscanf (ptr, " %[^\n]", temp);
      if (temp[0] == 'm' || temp[0] == 'M')
        {
          printf ("Male\n");
          printf ("Father's Name: ");
          fscanf (ptr, " %[^\n]", temp);
          printf ("%s\n", temp);
          printf ("Father's Email Id: ");
          fscanf (ptr, " %[^\n]", temp);
          printf ("%s\n", temp);
        }

      if (temp[0] == 'f' || temp[0] == 'F')
        {
          printf ("Female\n");
          printf ("Mother's Name: ");
          fscanf (ptr, " %[^\n]", temp);
          printf ("%s\n", temp);
          printf ("Mother's mobile number: ");
          fscanf (ptr, " %[^\n]", temp);
          printf ("%s\n", temp);
        }
      printf ("\n\n");

    }
  fclose (ptr);
}

Patrice T

ИСПОЛЬЗУЙТЕ СТРОЧНЫЕ БУКВЫ !
"ФУНКЦИЯ ОТОБРАЖЕНИЯ НЕ РАБОТАЕТ ДОЛЖНЫМ ОБРАЗОМ"
Это не информативно.
Вы должны сказать нам, что вы ожидаете и как дисплей ошибается.

Member 13394766

Функция отображения должна была дать номер рулона, имя, адрес и т. д. Даже если он показывает результат, но выход не заканчивается. Насколько мне известно, указатель файла не достигает EOF, а если и достигает, то feof не может его прочитать. Возможно, я ошибаюсь. Пожалуйста, пройдите через мой код и помогите мне.
Мне очень жаль, что я использую только колпачки. Я не знал,что это считается таким.

Patrice T

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

Member 13394766

- Готово! А теперь не могли бы вы мне помочь?

Richard MacCutchan

См. предложения OriginalGriff ниже.

Richard MacCutchan

Пожалуйста, удалите весь код, не связанный с проблемой, и правильно отформатируйте то, что осталось. Тогда объясните точно, в чем проблема.

Member 13394766

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

Dave Kreskowiak

Во-первых, перестаньте кричать на людей! Использование всех заглавных букв равносильно крику на кого-то в сети.

Затем удалите весь код, который не имеет никакого отношения к проблеме, и заключите его в теги HTML PRE, чтобы сохранить форматирование.

Member 13394766

Мне очень жаль, что я использую только колпачки. Я не знал,что это считается таким.
Я надеюсь, что код теперь легче понять.

1 Ответов

Рейтинг:
6

OriginalGriff

Как говорили другие:не кричи. Использование всех заглавных букв считается криком в интернете и грубостью (использование всех строчных букв считается ребячеством). Используйте правильную капитализацию, если хотите, чтобы вас воспринимали всерьез.

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

Но проблема, которую вы заметили, заключается в том, что он не сталкивается с EOF: он будет, но вы не всегда испытываете его.
У вас их несколько while циклы, которые всегда выходят только тогда, когда они читают '\n' из БД: так что если последняя строка не будет закончена правильно, то ваш код потерпит неудачу.
Поскольку вы не говорите нам, что происходит, вполне возможно, что проблема именно в этом. Мы не можем сказать, потому что у нас нет вашего файла данных, и я (например) все равно не стал бы запускать этот код на своих машинах.

Так что все будет зависеть от вас.
Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что именно то, что вы ожидали, произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас-вам пора освоить новый (и очень, очень полезный) навык: отладку!