- ベストアンサー
文字列の入力
文字列(名前)と誕生日を読み込み、表示するプログラムです。文字列を読み込むときに空行を入力すると、読み込みを終了して表示するようにしたのですが、うまくいきません。読み込む時に使う関数が違うのだと思います。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]); } }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
標準入力で、系列の違う関数を組み合わせて使うと動作が予測できなくなるのでgetchar()で一文字ずつ取り込んで、自前でパースする関数を作って処理した方が良いと思われます。
その他の回答 (3)
- HOGERA3
- ベストアンサー率35% (50/139)
#2です。 >getchar()を使うと改行文字は読み込めますか? はい、読み込めます。
- HOGERA3
- ベストアンサー率35% (50/139)
>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; }
ソースを見る気がないのでコメントですが c#またはCBuilder体験版を使用することをお勧めします。
補足
ありがとうございます。 getchar()を使うと改行文字は読み込めますか?