アドレス帳製作


saya  2011-12-31 13:13:49  No: 73085  IP: 192.*.*.*

アドレス帳を作っているのですが
入力できるデータを自分で決められるプログラムにしてみたのですが
print_profileの方で無限ループしたので工夫してみたのですが
print_profileが無視されて動くようになりました
どうしたらいいでしょうか?

#include<stdio.h>
typedef struct{
    char name[20];
    char tel[20];
    char mail[40];
} PERSON;
void print_profile(PERSON *p,int *a);
void input_profile(PERSON *p,int *a);
int main(void)
  {
    int i;
    PERSON a[990];
  input_profile(a,&i);
  print_profile(a,&i);
return 0;
}
void print_profile(PERSON *p,int *a) {
    int b;
  for(b=0;*a>b;b++)
  {
  printf("名前:%s\n",(p+b)->name);
    printf("電話:%s\n",(p+b)->tel);
    printf("メール:%s\n",(p+b)->mail);
  }
}

void input_profile(PERSON *p,int *a){
   int i;
  for(*a=0;999>*a;*a++){
    scanf("%s",(p+*a)->name);
    scanf("%s",(p+*a)->tel);
    scanf("%s",(p+*a)->mail);
    printf("処理を終わるなら0を入力\n");
    scanf("%d",&i);
      if(i==0)break;
  }
}

編集 削除
επιστημη  URL  2012-01-01 01:38:24  No: 73086  IP: 192.*.*.*

xxx_profileを呼ぶ前にiを適切な値にセットすべし。

編集 削除
tetrapod  2012-01-01 08:24:20  No: 73087  IP: 192.*.*.*

> xxx_profileを呼ぶ前にiを適切な値にセットすべし。
うんにゃ違う。本プログラムは i に値を返そうとして、返せていないだけ。

saya 氏
> for(*a=0;999>*a;*a++){
ここがおかしいわけだが、どうおかしいのかはもうちょっと自分で検討してみるべし。

全体的にあまりにもかっこ悪い。もう少し書き方を工夫してみると読みやすくなる。

編集 削除
επιστημη  URL  2012-01-01 10:16:44  No: 73088  IP: 192.*.*.*

> うんにゃ違う。

あ...すんません。
input_profileから戻ってきたとき、iに期待する値
が入ってるか確認しましょ。

編集 削除