3人分の、名前、年齢、性別、を入力して表示するプログラムを作りなさい。というプログラムなんですが、なぜかこのままだとコンパイルはとおるんですが文字入力を3回とfor文で定めているはずなのに、4回になってしまいます。なぜなんでしょうか・・・?prints関数内のfor文はちゃんと動作していて3つ出力されているんですが。コンパイルエラーは無しです。分かるかた教えて頂けないでしょうか?
#include <stdio.h>
struct tag{
char name[20];
int age;
char sex[20];
};
void put (struct tag *ai);
void prints(struct tag *sei);
int main(void)
{
struct tag kansuu[3];
put(kansuu);
prints(kansuu);
return 0;
}
void put (struct tag *ai)
{
int i;
for(i=0;i <3;i++){
scanf("%s %d %s\n",(ai+i)->name,&(ai+i)->age,(ai+i)->sex);
}
return;}
void prints(struct tag *sei)
{
int i;
for(i=0;i <3;i++)
printf("%s %d %s\n",(sei+i)->name,(sei+i)->age,(sei+i)->sex);
return;}
No.1ベストアンサー
- 回答日時:
scanf("%s %d %s",(ai+i)->name,&(ai+i)->age,(ai+i)->sex);
にしてください。ただ、scanfは使い方が非常に難しい関数なのでベテランの自覚が無い限り使わない方が良いです。
また、返値(何個の値が入力されたか)のチェックは必須です。
あと、この場合だと、
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 10 bbbbbbbbbbbbbbbbbbbbbbbbbb
のようなnameやsexのサイズを超える文字列入力があった場合、どうなるかわかりますか?%sには長さ指定が必須です。でも、単純に %19s じゃだめ。難しいでしょ?
http://ja.wikipedia.org/wiki/Scanf#scanf.E3.81.A …
普通には、fgets関数で1行入力して、何らかの関数で区切って値をとります。
\n を抜くと、確かに3回ループになってくれました。
原因がよく分かりませんが勉強になりました。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
へんな現象
-
研究室志望の提出文書
-
応用情報技術者試験の令和元年...
-
gccを行ってもexeファイルが生...
-
質問失礼します。 プログラム言...
-
Notepad++の関数リスト表示でC...
-
Windows formアプリで データグ...
-
Linux Cプログラミングを学ぶた...
-
トリプトファンってケト原性あ...
-
c言語
-
MACで動く実行ファイルをWindow...
-
C言語 列挙型(enum型)変数について
-
右ビットシフト
-
mallocについて
-
C言語 配列と関数の練習問題
-
Bitcoin、BTCはブロックチェー...
-
C++6.0でのresource.hについて
-
VisualStudio2022でC言語プログ...
-
大量のデータを読み込んで表示...
-
c言語
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
bashスクリプト内のpostgreSQL...
-
YAHOO JAPANの左右の広告を非表...
-
ディープフェイクを作成するサ...
-
pdfをaiに自動で変換したい
-
得もないのに面倒なことをしよ...
-
小論文?作文?です。お願いし...
-
失業者が出るのになぜAIを作る...
-
FTXって、どういう意味ですか?...
-
鯉はどうして水面に跳ねるので...
-
pHジャンプについて教えてくだ...
-
アルファベットを中国語(漢字...
-
dynamicsとkineticsの違いって...
-
ビー玉を41個使って遊ぶゲー...
-
都市銀行店頭の店員さん全てロ...
-
慣性がなかったら、どうなりますか
-
よく「飲み行こう」「食べ行こ...
-
生物と無生物の最大の違いって...
-
走る電車の中と外でジャンプし...
-
steamに登録できない
-
皆さん、おはようございます♪ ...
おすすめ情報