
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ランキング
-
添付ファイル!!!
-
YAHOO JAPANの左右の広告を非表...
-
Raspberry Pi
-
bashスクリプト内のpostgreSQL...
-
ワークポイントとは何ですか(...
-
URLを自動でリンクしないように...
-
この問題が分かりません! どな...
-
pHジャンプについて教えてくだ...
-
鯉はどうして水面に跳ねるので...
-
(1),(2)ともに逆も成り立ちます...
-
はい、今日もまたYoutube観て終...
-
代数 有限体の問題について
-
ロボットに必要な機能について。
-
どのようにして開発したロボッ...
-
ロボットには与えない方がいい...
-
PLCとIAIのロボットシリンダー...
-
見たまんま剣スコップ型の武器...
-
日本語と外国語で、音は同じだ...
-
フランス語和訳依頼
-
翻訳してくださいm(_ _)m
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
bashスクリプト内のpostgreSQL...
-
1命令を関数化するメリットは?
-
C言語
-
pdfをaiに自動で変換したい
-
チャットボットを学習させるた...
-
小論文?作文?です。お願いし...
-
ディープフェイクを作成するサ...
-
display flex について
-
エアコンの令、暖房のしくみを...
-
失業者が出るのになぜAIを作る...
-
ポインタ配列
-
ディープフェイクを作成するサ...
-
jpg→ai わたしは、ココナラでデ...
-
VBA 一覧からデータを抽出し、...
-
Raspberry Pi
-
教えてください。
-
YAHOO JAPANの左右の広告を非表...
-
iframe と ssi のメリットとデ...
-
どのようにして開発したロボッ...
-
文系大学を卒業しています。27...
おすすめ情報