daily pastebin goal
5%
SHARE
TWEET

Untitled

a guest May 20th, 2018 113 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define NAMELEN 16
  2.  
  3. struct list {
  4.  
  5.     char name[NAMELEN];
  6.     int price;
  7.     struct list *next;
  8.  
  9. };
  10.  
  11. struct list *start = NULL;
  12.  
  13. int main() {
  14.  
  15.     struct list *p = NULL, *dt, *t;
  16.     int n;
  17.     char name[NAMELEN] = { '' };
  18.  
  19. do {
  20.         do {
  21.             printf("データの追加・削除[Add...0 / Delete... 9]:");
  22.             scanf_s("%d", &n);
  23.             if (n != 0 && n != 9) {
  24.                 printf("0もしくは9を入力してくださいn");
  25.             }
  26.         } while (n != 0 && n != 9);
  27.  
  28.         /*追加*/
  29.         if (n == 0) {
  30.             dt = (struct list *)malloc(sizeof(struct list));
  31.             dt->next = NULL;
  32.             printf("名前:"); scanf_s("%s",dt->name,NAMELEN);
  33.             printf("値段:"); scanf_s("%d", &dt->price);
  34.             if (start == NULL) {
  35.                 start = dt;
  36.                 p = dt;
  37.             }
  38.             else {
  39.                 p->next = dt;
  40.                 p = dt;
  41.             }
  42.         }
  43.  
  44.  
  45.         /*削除*/
  46.         if (n == 9) {
  47.  
  48.             if (start == NULL) {
  49.                 printf("データがありませんn");
  50.             }
  51.             else {
  52.                 p = NULL;/*dtの一つ前のデータのポインタを入れる*/
  53.                 printf("名前:"); scanf_s("%s",name,NAMELEN);
  54.                 dt = start;
  55.                 do {
  56.                     if (strcmp(name, dt->name) == 0) {//同じ
  57.                         if (p == NULL) {//先頭のデータと同じだった時の削除
  58.                             printf("pn");//確認
  59.                             start = dt->next;
  60.                         }
  61.                         else {
  62.                             p->next = dt->next;
  63.                             free(dt);
  64.                             dt = NULL;
  65.                         }
  66.  
  67.                         break;
  68.                     }
  69.                     else {
  70.                         p = dt;
  71.                         dt = dt->next;
  72.                     }
  73.                 } while (dt != NULL);
  74.  
  75.                 //最後のデータを探す
  76.                 p = start;
  77.                 if (p == NULL) {
  78.                 }
  79.                 else {
  80.  
  81.                     do {
  82.  
  83.                         if (p->next != NULL) {
  84.                             printf("最後のデータを探すn");
  85.  
  86.                             p = p->next;
  87.                         }
  88.                         else {
  89.                             break;
  90.                         }
  91.  
  92.                     } while (p != NULL);
  93.                 }
  94.  
  95.             }
  96.  
  97.         }
  98.  
  99.     /*表示*/
  100.     t = start;
  101.     if (t != NULL) {
  102.         n = 1;
  103.         do {
  104.             printf("No.%d: 名前 %s  値段 %dn", n, t->name, t->price);
  105.             t = t->next;
  106.             n++;
  107.             } while (t != NULL);
  108.         }
  109.         else {
  110.         printf("データはありません");
  111.         }
  112.  
  113.     do {
  114.         printf("もう一度? [YES・・・0 / NO・・・9]:");
  115.         scanf_s("%d",&n);
  116.         if (n != 0 && n != 9) {
  117.             printf("0もしくは9を入力してくださいn");
  118.             }
  119.         } while (n != 0 && n != 9);
  120.  
  121.  
  122. } while (n != 9);
  123.  
  124.  
  125.  
  126.  
  127.     _getch();
  128.     return 0;
  129. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top