#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN 30
char * sgets(char *, int);
struct book {
char title[LEN];
char author[LEN];
char id;
};
typedef struct book Item;
typedef struct node {
Item item;
struct node * next;
} Node;
int main(void)
{
Node * head;
Node * prev, * current;
while (1)
{
current
= malloc(sizeof *current
);
if (head == NULL)
head = current;
else
prev->next = current;
if (sgets(current->item.author, LEN) == NULL || current->item.author[0] == '\0')
{
current = NULL;
break;
}
if (sgets(current->item.title, LEN) == NULL || current->item.title[0] == '\0')
{
current = NULL;
break;
}
if (scanf("%hhd", ¤t
->item.
id) != 1) {
current = NULL;
break;
}
continue;
current->next = NULL;
prev = current;
}
current = head;
while (current)
{
printf("%d: %s - %s\n", current
->item.
id, current
->item.
title, current
->item.
author); current = current->next;
}
current = head;
while (current != NULL)
{
current = current->next;
}
return 0;
}
char * sgets(char * str, int len)
{
char * temp;
if (temp)
*temp = '\0';
else
continue;
return str;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKI2RlZmluZSBMRU4gMzAKCmNoYXIgKiBzZ2V0cyhjaGFyICosIGludCk7CgpzdHJ1Y3QgYm9vayB7CiAgICBjaGFyIHRpdGxlW0xFTl07CiAgICBjaGFyIGF1dGhvcltMRU5dOwogICAgY2hhciBpZDsKfTsKCnR5cGVkZWYgc3RydWN0IGJvb2sgSXRlbTsKCnR5cGVkZWYgc3RydWN0IG5vZGUgewogICAgSXRlbSBpdGVtOwogICAgc3RydWN0IG5vZGUgKiBuZXh0Owp9IE5vZGU7CgppbnQgbWFpbih2b2lkKQp7CiAgICBOb2RlICogaGVhZDsKICAgIE5vZGUgKiBwcmV2LCAqIGN1cnJlbnQ7CgoKICAgIHdoaWxlICgxKQogICAgewogICAgICAgIGN1cnJlbnQgPSBtYWxsb2Moc2l6ZW9mICpjdXJyZW50KTsKICAgICAgICAKICAgICAgICBpZiAoaGVhZCA9PSBOVUxMKQogICAgICAgICAgICBoZWFkID0gY3VycmVudDsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHByZXYtPm5leHQgPSBjdXJyZW50OwoKICAgICAgICBpZiAoc2dldHMoY3VycmVudC0+aXRlbS5hdXRob3IsIExFTikgPT0gTlVMTCB8fCBjdXJyZW50LT5pdGVtLmF1dGhvclswXSA9PSAnXDAnKQogICAgICAgIHsKICAgICAgICAgICAgY3VycmVudCA9IE5VTEw7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNnZXRzKGN1cnJlbnQtPml0ZW0udGl0bGUsIExFTikgPT0gTlVMTCB8fCBjdXJyZW50LT5pdGVtLnRpdGxlWzBdID09ICdcMCcpCiAgICAgICAgewogICAgICAgICAgICBjdXJyZW50ID0gTlVMTDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBpZiAoc2NhbmYoIiVoaGQiLCAmY3VycmVudC0+aXRlbS5pZCkgIT0gMSkKICAgICAgICB7CiAgICAgICAgICAgIGN1cnJlbnQgPSBOVUxMOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKGdldGNoYXIoKSAhPSAnXG4nKQogICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgY3VycmVudC0+bmV4dCA9IE5VTEw7CgogICAgICAgIHByZXYgPSBjdXJyZW50OwogICAgfQoKICAgIGN1cnJlbnQgPSBoZWFkOwoKICAgIHdoaWxlIChjdXJyZW50KQogICAgewogICAgICAgIHByaW50ZigiJWQ6ICVzIC0gJXNcbiIsIGN1cnJlbnQtPml0ZW0uaWQsIGN1cnJlbnQtPml0ZW0udGl0bGUsIGN1cnJlbnQtPml0ZW0uYXV0aG9yKTsKICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dDsKICAgIH0KCiAgICBjdXJyZW50ID0gaGVhZDsKCiAgICB3aGlsZSAoY3VycmVudCAhPSBOVUxMKQogICAgewogICAgICAgIGZyZWUoY3VycmVudCk7CiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCmNoYXIgKiBzZ2V0cyhjaGFyICogc3RyLCBpbnQgbGVuKQp7CgljaGFyICogdGVtcDsKCQoJZmdldHMoc3RyLCBsZW4sIHN0ZGluKTsKCQoJdGVtcCA9IHN0cmNocihzdHIsICdcbicpOwoJCglpZiAodGVtcCkKCQkqdGVtcCA9ICdcMCc7CgllbHNlCgkJd2hpbGUgKGdldGNoYXIoKSAhPSAnXG4nKQoJCQljb250aW51ZTsKCQoJcmV0dXJuIHN0cjsKfQ==