プロが教えるわが家の防犯対策術!

文字列(名前)と誕生日を読み込み、表示するプログラムです。文字列を読み込むときに空行を入力すると、読み込みを終了して表示するようにしたのですが、うまくいきません。読み込む時に使う関数が違うのだと思います。scanfとgets、fgetsは試したのですが、だめでした。
教えてください。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define DATA 3

int main()
{
char *name[DATA];
char work[31];
int month[DATA];
int day[DATA];
int count1,count2;

printf("Data #1\n");
printf("name =");
fgets(work,31,stdin);

for(count1=0;(work[0]!='\n')&&(count1<DATA);count1++){
printf("month =");
scanf("%d",&month[count1]);

printf("day =");
scanf("%d",&day[count1]);

name[count1]=(char *)malloc((strlen(work)+1)*sizeof(char));
strcpy(*(name+count1),work);

printf("\n");

if(count1<DATA-1){
printf("Data #%d\n",count1+2);
printf("name =");
fgets(work,31,stdin);
}
}

for(count2=0;(count2<DATA)&&(count2<count1);count2++){
printf("Data #%d\n",count2+1);
printf(" name: %s\n",*(name+count2));
printf(" birthday: %2d %2d\n",month[count2],day[count2]);
}
}

A 回答 (4件)

標準入力で、系列の違う関数を組み合わせて使うと動作が予測できなくなるのでgetchar()で一文字ずつ取り込んで、自前でパースする関数を作って処理した方が良いと思われます。

この回答への補足

ありがとうございます。
getchar()を使うと改行文字は読み込めますか?

補足日時:2004/02/14 20:06
    • good
    • 0

#2です。



>getchar()を使うと改行文字は読み込めますか?
はい、読み込めます。
    • good
    • 0

>scanfとgets、fgetsは試したのですが、だめでした。


どう試して、どうだめだったのかを言ってくれないと
回答のしようがありません。

やりたいことはこういうこと↓ですか?

#include <stdio.h>
#include <stdlib.h> /* atoi() */
#include <string.h> /* strcpy() */

#define BUFF_LEN 64
#define DATA 3

int main(void)
{
  char buff[BUFF_LEN];
  int i;

  for (i = 0; i < DATA; ++i) {
    char name[BUFF_LEN];
    int month, day;

    printf("name = ");
    fgets(buff, BUFF_LEN, stdin);
    strcpy(name, buff);

    printf("month = ");
    fgets(buff, BUFF_LEN, stdin);
    month = atoi(buff);

    printf("day = ");
    fgets(buff, BUFF_LEN, stdin);
    day = atoi(buff);

    printf("\nData #%d\n name: %s birthday: %2d %2d\n",
      i + 1, name, month, day);
  }
  return 0;
}
    • good
    • 0

ソースを見る気がないのでコメントですが


c#またはCBuilder体験版を使用することをお勧めします。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!