fork download
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include <string.h>
  4.  
  5. #define REGISTER(n, number, name) \
  6.   do { \
  7.   printf(" %d 番目の学生の学籍番号と氏名を登録します。\n", n); \
  8.   pointer_root = register_student(pointer_root, number, name); \
  9.   } while(0)
  10. #define TAIL 0
  11.  
  12. struct student {
  13. int number; //学生番号
  14. char name[10]; //苗字
  15. struct student *next;
  16. };
  17.  
  18. struct student *register_student(struct student *head, int number, char *name)
  19. {
  20. struct student *new = (struct student *)malloc(sizeof (struct student));
  21. new->number = number;
  22. strcpy(new->name, name);
  23. new->next = head;
  24. return new;
  25. }
  26.  
  27. int main(void)
  28. {
  29. int in_number;
  30. char in_name[10];
  31. struct student *pointer_root = TAIL;
  32. struct student *pointer_student;
  33.  
  34. printf("今からデータを自動的に登録して、リスト構造を作成します。\n");
  35.  
  36. REGISTER(1, 175, "tanaka");
  37. REGISTER(2, 176, "yamada");
  38. REGISTER(3, 177, "nakamura");
  39. REGISTER(4, 178, "aoki");
  40. REGISTER(5, 179, "katoh");
  41.  
  42. printf("\n");
  43. printf("名簿に登録された学生のリストを表示します。\n");
  44. pointer_student = pointer_root;
  45.  
  46. while (pointer_student != TAIL) {
  47. printf("%d %s\n", pointer_student->number , pointer_student->name);
  48. pointer_student = pointer_student->next;
  49. }
  50.  
  51. printf("\n");
  52. printf("リスト構造の最初に新しい学生を追加します。\n");
  53. printf("追加する学生番号と氏名を入力してください。");
  54. scanf("%d %s", &in_number , in_name);
  55.  
  56. pointer_root = register_student(pointer_root, in_number, in_name);
  57.  
  58. printf("\n");
  59. printf("学生が追加登録されたので、名簿に登録された学生のリストを表示します。\n");
  60. pointer_student = pointer_root;
  61.  
  62. while (pointer_student != TAIL) {
  63. printf("%d %s\n", pointer_student->number, pointer_student->name);
  64. pointer_student = pointer_student->next;
  65. }
  66. return 0;
  67. }
stdin
1234 hoge
compilation info
prog.c: In function ‘main’:
prog.c:54: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
stdout
今からデータを自動的に登録して、リスト構造を作成します。
 1 番目の学生の学籍番号と氏名を登録します。
 2 番目の学生の学籍番号と氏名を登録します。
 3 番目の学生の学籍番号と氏名を登録します。
 4 番目の学生の学籍番号と氏名を登録します。
 5 番目の学生の学籍番号と氏名を登録します。

名簿に登録された学生のリストを表示します。
179  katoh
178  aoki
177  nakamura
176  yamada
175  tanaka

リスト構造の最初に新しい学生を追加します。
追加する学生番号と氏名を入力してください。
学生が追加登録されたので、名簿に登録された学生のリストを表示します。
1234  hoge
179  katoh
178  aoki
177  nakamura
176  yamada
175  tanaka