学校の課題で上手くいかずに困っています。キーボードから入力したものを構造体に納める機能を関数で実装するんですが、1番目の構造体に入力した後、次の構造体に入力できません。下にその関数の部分を載せるので、どのように直したらいいか、また上手くいかなかった原因を教えてくだい。
typedef struct _Music {
char title[1024];
char artist[1024];
int year, month, day, star;
} Music;
void register_record(Music *mus, int *current_num_ptr);
int main(void)
{
Music musiclist[200];
int num_record = 0;
char buf[128], n;
while (1) {
printf("[1]Registration [q|Q]quit\nEnter Number> ");
fgets(buf, sizeof(buf), stdin);
sscanf(buf, "%c", &n);
if (n == 'q' || n == 'Q') {
break;
} else if (n == '1') {
printf("Registration\n");
register_record(musiclist, &num_record);
num_record = num_record + 1;
} else {
printf("wrong number\n");
}
}
return 0;
}
void register_record(Music *mus, int *current_num_ptr)
{
char tem[1024];
int x;
printf("Title> ");
scanf("%s", tem);
strcpy(mus->title, tem);
printf("Artist> ");
scanf("%s", tem);
strcpy(mus->artist, tem);
printf("Date(year)> ");
scanf("%d", &x);
mus->year = x;
printf("Date(month)> ");
scanf("%d", &x);
mus->month = x;
printf("Date(day)> ");
scanf("%d", &x);
mus->day = x;
printf("My Rate> ");
scanf("%d", &x);
mus->star = x;
printf("---Complete registration!!---\n");
printf("No.%d Title:%s Artist:%s Date:%d/%d/%d My Rate:%d\n", current_num_ptr, mus->title, mus->artist, mus->year, mus->month, mus->day, mus->star);
}
No.4
- 回答日時:
"register_record"内で、
"static int i;"を宣言して、
"mus"を、"mus + i"とし、
最後に"i ++"。
No.2
- 回答日時:
register_record()へは常にmusiclist[200]の先頭しか渡ってないですね。
呼び出し部分を
register_record(musiclist, &num_record);
↓
register_record(musiclist[num_record], &num_record);
としたらどうですか?
printf("No.%d ... ", current_num_ptr,...);
ですが、ポインタのアドレスを表示してると思いますよ。
current_num_ptrはアドレス渡ししなくてもよいのでは?
一度この方法でやってみたんですけど、上手くコンパイル出来なかったんです…。でも、BLUEPIXYさんの方法で上手く出来ました!!アドバイスありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列を使って魔方陣
-
C言語の二分法のプログラムにつ...
-
構文エラー";"が型の前にあり...
-
初心者です。for文、if文を使っ...
-
for文の中にswitch文はいれられ...
-
C言語 数字以外を入力させない...
-
#if 1 #elseの意味について
-
scanf関数を用いての加減乗除%...
-
c言語の問題
-
配列を関数に渡す方法
-
C言語プログラムが理解できなくて…
-
VHDLで、case文とwhen文のどち...
-
getcの改行判定
-
C言語でfor文を用いたプログラ...
-
c言語プログラミングで1から100...
-
c言語のプログラムで
-
scanfが実行されません
-
直角三角形を表示するプログラム
-
C言語のプログラミング (基礎...
-
for文を使用して値を代入したい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
#if 1 #elseの意味について
-
構文エラー";"が型の前にあり...
-
for文の中にswitch文はいれられ...
-
配列を関数に渡す方法
-
計算結果がlong型以上になる場...
-
プログラミングで二番目に大き...
-
scanf関数を用いての加減乗除%...
-
getcの改行判定
-
C言語で電卓を作成する。
-
配列を使って魔方陣
-
C言語で勉強中(max,min)の出し方
-
C言語階乗の総和を求める
-
VHDLで、case文とwhen文のどち...
-
C言語でのトランプシャッフルに...
-
プログラム
-
while文について、c言語...
-
OpenCVを用いて任意の時間で静...
-
scanfが実行されません
-
C言語 数字以外を入力させない...
-
C言語です
おすすめ情報