このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/788
#  [1] 授業単元:プログラミング  
#  [2] 問題文(含コード&リンク):  
#  #include <stdio.h> 
#  #include <string.h> 
#   
#  struct Address_data{ 
#   char name[81]; 
#   char phone[20]; 
#   int age; 
#  }; 
#   
#  int main() 
#  { 
#   struct Address_data data[2], *p = data; 
#   printf("Input end = Ctrl + D\n"); 
#   for (p = data; p - data < 2; p++) 
#    p->age = -1; 
#   for (p = data; p - data < 2; p++) { 
#    printf("[%ld]name phone age = ", p - data); 
#    if (scanf("%s %s %d", p->name, p->phone, &p->age) != 2) 
#     break; 
#   } 
#   printf("\n"); 
#   for (p = data; p->age >= 0; p++) 
#    printf("%s\t(%d)\t[%s]\n", p->name, p->age, p->phone); 
#   return (0); 
#  } 
# 
# 

要素数10の構造体ならび(_要素数10の構造体ならび) :-
        length(_要素数10の構造体ならび,10),
        findall(電話番号(氏名(_氏名),電話番号(_電話番号)),(
                    append(_,[_|_],_要素数10の構造体ならび),
                    名前の入力(_名前),
                    電話番号の入力(_電話番号)),
                _要素数10の構造体ならび).

名前の入力(_名前) :-
        write('名前を入力してください : '),
        get_line(Line),
        名前入力診断(Line,_名前),!.

名前入力診断(Line,_名前) :-
        sub_atom(Line,0,Len,0,_Line),
        Len > 80,
        sub_atom(Line,0,80,_,_名前),!.
名前入力診断(_名前,_名前).

電話番号の入力(_電話番号) :-
        write('電話番号を入力してください : '),
        get_line(Line),
        電話番号入力診断(Line,_電話番号),!.

電話番号入力診断(Line,_電話番号) :-
        sub_atom(Line,0,Len,0,_Line),
        Len > 20,
        sub_atom(Line,0,20,_,_電話番号),!.
電話番号入力診断(_電話番号,_電話番号).