[ create a new paste ] login | about

Link: http://codepad.org/kRWaQPuY    [ raw code | output | fork ]

C, pasted on Dec 1:
#include <stdio.h>
#include <malloc.h>
#include <string.h>

struct Student{
  int number;// 学生の学籍番号
  char name[10];// 学生の苗字
  struct Student  *next;
};

int main(){
  int  in_number;

  struct Student  *pointer_root;

  pointer_root = (struct Student *)malloc( sizeof(struct Student) );

  printf("今からデータを自動的に登録して、課題4のリスト構造を作成します。\n");

  struct Student  *pointer_student;// リスト構造の各要素のメモリ番地を動いて行くポインタ変数
  pointer_student = pointer_root;

  printf(" %d 番目の学生の学籍番号と氏名を登録します。\n", 1);
  pointer_student->number = 175;
  strcpy(pointer_student->name, "tanaka");

  printf(" %d 番目の学生の学籍番号と氏名を登録します。\n", 2);
  pointer_student->next = (struct Student *)malloc( sizeof(struct Student) );
  pointer_student = pointer_student->next;
  pointer_student->number = 176;
  strcpy(pointer_student->name, "yamada");

  printf(" %d 番目の学生の学籍番号と氏名を登録します。\n", 3);
  pointer_student->next = (struct Student *)malloc( sizeof(struct Student) );
  pointer_student = pointer_student->next;
  pointer_student->number = 177;
  strcpy(pointer_student->name, "nakamura");

  printf(" %d 番目の学生の学籍番号と氏名を登録します。\n", 4);
  pointer_student->next = (struct Student *)malloc( sizeof(struct Student) );
  pointer_student = pointer_student->next;
  pointer_student->number = 178;
  strcpy(pointer_student->name, "aoki");

  printf(" %d 番目の学生の学籍番号と氏名を登録します。\n", 5);
  pointer_student->next = (struct Student *)malloc( sizeof(struct Student) );
  pointer_student = pointer_student->next;
  pointer_student->number = 179;
  strcpy(pointer_student->name, "katoh");

  printf(" %d 番目の学生の学籍番号と氏名を登録します。\n", 6);
  pointer_student->next = (struct Student *)malloc( sizeof(struct Student) );
  pointer_student = pointer_student->next;
  pointer_student->number = 180;
  strcpy(pointer_student->name, "suzuki");

  pointer_student->next = NULL;


  printf("\n");
  printf("名簿に登録された学生のリストを表示します。\n");
  pointer_student = pointer_root;

  while(1){
	printf( "%d  %s \n", pointer_student->number , pointer_student->name );
    pointer_student = pointer_student->next;
	if( pointer_student == NULL ){ break; }
  }

  printf("\n");
  printf("学籍番号を入力してください。その番号の学生を削除します。");
  scanf( "%d", &in_number );


  pointer_student = pointer_root;

  if( pointer_student->number == in_number ){
	  printf("学籍番号 %d の学生 %s を削除します。\n", pointer_student->number, pointer_student->name );

      pointer_root = pointer_student->next;

      free( pointer_student );
  }
  else{
    struct Student  *pointer_previous_student;

    while(1){
	  pointer_previous_student = pointer_student;
      pointer_student = pointer_student->next;

	  if( pointer_student->number == in_number ){
	    printf("学籍番号 %d の学生 %s を削除します。\n", pointer_student->number, pointer_student->name );

        pointer_previous_student->next = pointer_student->next;

        free( pointer_student );
	    break;
	  }

    }

  }
  printf("\n");
  printf("名簿に登録された学生のリストを 改めて表示します。\n");
  pointer_student = pointer_root;

  while(1){
	printf( "%d  %s \n", pointer_student->number , pointer_student->name );
    pointer_student = pointer_student->next;
	if( pointer_student == NULL ){ break; }
  }
  return 0;
}


Output:
1
Segmentation fault


Create a new paste based on this one


Comments: