@olkhovich

В чем ошибка сортировки?

Помогите найти ошибку.
Требуется вывести названия книг определенного автора (видимо нужно ввести с клавиатуры фамилию автора), изданных после 2000 года.
У меня при вводе любой фамилии выводится "No"
void year (list begin)
{
     char surname [15];
     int year, k = -1;
     list pos;
     system ("CLS");
     if (!begin) // если список пуст
     {
	    puts ("List is empty");
	    system("pause");
	    return;
     }
     getchar();
     puts ("Surname?");
     scanf ("%c", &surname);
     while (begin) //пока в списке есть эл-ты
     {
        k++;
        if (begin->data.surname == surname && begin->data.year > 2000)
        {
           year = begin->data.year;
           pos = begin;
        }
        begin = begin->next; // переставляем указатель на след эл-т
//        free (temp); // удаляем первый
     }
     if (year <= 0 || year >= 2020) puts ("No");
     else printf ("Title : %s\n", pos->data.title);
     system("pause");
}
  • Вопрос задан
  • 193 просмотра
Решения вопроса 1
myjcom
@myjcom
видимо нужно ввести с клавиатуры фамилию автора

%c -> %s
scanf ("%c", &surname);
https://en.cppreference.com/w/c/io/fscanf

У меня при вводе любой фамилии выводится "No"

Compares two null-terminated byte strings lexicographically.
https://en.cppreference.com/w/c/string/byte/strcmp

вот это никогда не выполняется
if (begin->data.surname == surname && begin->data.year > 2000) // false false false false ...
{
  year = begin->data.year;
  pos = begin;
}


чему тогда равно int year???

и соответственно
if (year <= 0 || year >= 2020) puts ("No");

Как то
while(begin) //пока в списке есть эл-ты
{
  if(begin->data.year > 2000 && !strcmp(begin->data.surname, surname))
  {
    printf("Title : %s\n", begin->data.title);
  }
  begin = begin->next; 
}

если, вам это занятие интересно, то лучше
Книжку купите/скачайте
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы