初めまして。
初めまして。
皆さん、初めまして。プログラミングが好きなMr.Redと申します。
まだ、入ったばかりですがよろしくお願いします。
早速ですが、助けてほしいことがあります。
128名分が記憶可能になるような構造体の配列のプログラムを作成しているのですがうまくいきません。
申し訳ありませんが、教えてください。
後、データを身長の高い順に出力するようなプログラム(上記に述べたプログラムの変更版)も教えてください。
※名前と身長と血液型を0、0、0(三つとも全て)と入力すると終了する。
または、一つの構造体の各メンバの値を表示する関数を作成すること。
以下は、私が書いたソースコードです。
#include <stdio.h>
#include <string.h>
#define N (64)
#define BUFFER_SIZE (128)
struct data//一つの構造体の各メンバの値を表示する関数
{
char name[N];
float height;
char bloodType[N];
};
int main(void)//main関数
{
struct data p;
int n;
char buf[BUFFER_SIZE];
for(n=1; n<=BUFFER_SIZE; n++)
{
printf("%d人目のデータ", n);
fgets(p.name, BUFFER_SIZE, stdin);
if(p.name == 0 && p.height == 0 && p.bloodType == 0)
{
break;
}
}
printf("名前 身長 血液型\n");
printf("%s \n", p.name);
printf("%f \n", p.height);
printf("%s \n", p.bloodType);
return 0;
}
出力結果は以下のような感じです。
名前 身長 血液型
A君 150.5 AB
B様 159.4 O
まだ、入ったばかりですがよろしくお願いします。
早速ですが、助けてほしいことがあります。
128名分が記憶可能になるような構造体の配列のプログラムを作成しているのですがうまくいきません。
申し訳ありませんが、教えてください。
後、データを身長の高い順に出力するようなプログラム(上記に述べたプログラムの変更版)も教えてください。
※名前と身長と血液型を0、0、0(三つとも全て)と入力すると終了する。
または、一つの構造体の各メンバの値を表示する関数を作成すること。
以下は、私が書いたソースコードです。
#include <stdio.h>
#include <string.h>
#define N (64)
#define BUFFER_SIZE (128)
struct data//一つの構造体の各メンバの値を表示する関数
{
char name[N];
float height;
char bloodType[N];
};
int main(void)//main関数
{
struct data p;
int n;
char buf[BUFFER_SIZE];
for(n=1; n<=BUFFER_SIZE; n++)
{
printf("%d人目のデータ", n);
fgets(p.name, BUFFER_SIZE, stdin);
if(p.name == 0 && p.height == 0 && p.bloodType == 0)
{
break;
}
}
printf("名前 身長 血液型\n");
printf("%s \n", p.name);
printf("%f \n", p.height);
printf("%s \n", p.bloodType);
return 0;
}
出力結果は以下のような感じです。
名前 身長 血液型
A君 150.5 AB
B様 159.4 O
Re: 初めまして。
コードタグをお使いください。
詳しい使い方はこちらを見てください。
気になった点がいくつかあったのですが、
char buf[BUFFER_SIZE]は何のために定義したのですか?
fgetsの第二引数はNではなくBUFFER_SIZEなのですね?
まず、構造体配列を作らなくてはなりません。
次に、fgetsではなくscanfを使ったほうがいいです。
あと、仮に0と入力があったとしてもp.nameに代入されるのは文字列"0"であり数値0ではありません。
詳しい使い方はこちらを見てください。
気になった点がいくつかあったのですが、
char buf[BUFFER_SIZE]は何のために定義したのですか?
fgetsの第二引数はNではなくBUFFER_SIZEなのですね?
まず、構造体配列を作らなくてはなりません。
次に、fgetsではなくscanfを使ったほうがいいです。
あと、仮に0と入力があったとしてもp.nameに代入されるのは文字列"0"であり数値0ではありません。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 初めまして。
フォーラムルールをご確認下さい。マルチポストの場合は、相互リンクをお願いしております。
http://dixq.net/board/board.html
「プログラミングを学んでいる大学生です。 128名分が記憶可能になるような構造体の... - Yahoo!知恵袋」
http://detail.chiebukuro.yahoo.co.jp/qa ... r=pofee_pc
あと課題っぽいですが正直にお願いします。
http://dixq.net/board/board.html
「プログラミングを学んでいる大学生です。 128名分が記憶可能になるような構造体の... - Yahoo!知恵袋」
http://detail.chiebukuro.yahoo.co.jp/qa ... r=pofee_pc
あと課題っぽいですが正直にお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 初めまして。
>>涼雅さん。
わかりました。次からは質問するときにコードタグは使います。
defineのNは構造体の名前と血液型の制限時数を定義していて、BUFFER_SIZEは128名分を定義してます。
あと、fgets()を入力するときに、BUFFER_SIZEではなくNであることに気が付きました。
>>ソフト屋さん。
はい、学校に提出しなければいけない課題です。
正確に言います。
問題は「128名分が記憶可能になるような構造体の配列のプログラム」について、上記のソースコードを入力したのですが出力結果(※)のようになることができません。
何回も何回も訂正をしたのですが、原因を突き止めることはできませんでした。
出力結果(※)がならない原因。
fgets()で各人の名前、身長、血液型のデータを1行で入力の仕方。
各データを身長の高い順に出力するようになる変更の仕方。
if文で名前と身長と血液型を0、0、0(三つとも全てゼロ)と入力すると終了させるタイミング。
↑
以上の四つを教えてください。
本当におねがいします。
※出力結果
名前 身長 血液型
A君 150.5 AB
B様 159.4 O
わかりました。次からは質問するときにコードタグは使います。
defineのNは構造体の名前と血液型の制限時数を定義していて、BUFFER_SIZEは128名分を定義してます。
あと、fgets()を入力するときに、BUFFER_SIZEではなくNであることに気が付きました。
>>ソフト屋さん。
はい、学校に提出しなければいけない課題です。
正確に言います。
問題は「128名分が記憶可能になるような構造体の配列のプログラム」について、上記のソースコードを入力したのですが出力結果(※)のようになることができません。
何回も何回も訂正をしたのですが、原因を突き止めることはできませんでした。
出力結果(※)がならない原因。
fgets()で各人の名前、身長、血液型のデータを1行で入力の仕方。
各データを身長の高い順に出力するようになる変更の仕方。
if文で名前と身長と血液型を0、0、0(三つとも全てゼロ)と入力すると終了させるタイミング。
↑
以上の四つを教えてください。
本当におねがいします。
※出力結果
名前 身長 血液型
A君 150.5 AB
B様 159.4 O
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 初めまして。
申し訳ないですがフォーラムルールを守って頂かないと回答できませんので、よろしくおねがいします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 初めまして。
こんにちは、ookamiです。
Mr.RedさんのC言語への理解度を知りたいので、
上記のmain関数の各行に、その行で何をしているか、書いてみてくれませんか?
最初の2行は書いてみました。
Mr.RedさんのC言語への理解度を知りたいので、
上記のmain関数の各行に、その行で何をしているか、書いてみてくれませんか?
最初の2行は書いてみました。
int main(void)//main関数
{
struct data p; // data型のpを定義
int n; // int型のnを定義
char buf[BUFFER_SIZE]; // : こんな感じで、すべての行にコメントを追加してください。
for(n=1; n<=BUFFER_SIZE; n++)
{
printf("%d人目のデータ", n);
fgets(p.name, BUFFER_SIZE, stdin);
if(p.name == 0 && p.height == 0 && p.bloodType == 0)
{
break;
}
}
printf("名前 身長 血液型\n");
printf("%s \n", p.name);
printf("%f \n", p.height);
printf("%s \n", p.bloodType);
return 0;
}
Re: 初めまして。
ソフト屋さん>>
返信が遅くなってすいません。
わかりました、以後は気を付けます。
ookamiさん>>
私のC言語への理解度は、初心者並程度(printf,ifなど基礎は一応知っている)です。
以下のmain関数の各行には、構造体のデータを入力する装置のような感じです。
返信が遅くなってすいません。
わかりました、以後は気を付けます。
ookamiさん>>
私のC言語への理解度は、初心者並程度(printf,ifなど基礎は一応知っている)です。
以下のmain関数の各行には、構造体のデータを入力する装置のような感じです。
int main(void) //main関数
{
struct data p;
int n; //nは人数(最大128人)分とする
char buf[BUFFER_SIZE]; //メモリ領域の用意
for(n=1; n<=BUFFER_SIZE; n++)
{
printf("%d人目のデータ", n);
fgets(p.name, BUFFER_SIZE, stdin);
if(p.name == 0 && p.height == 0 && p.bloodType == 0)
{
break;
}
}
printf("名前 身長 血液型\n");
printf("%s \n", p.name);
printf("%f \n", p.height);
printf("%s \n", p.bloodType);
return 0;
}
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 初めまして。
補足などを使って相互リンクを直ちに行なって下さい。Mr.Red さんが書きました:ソフト屋さん>>
返信が遅くなってすいません。
わかりました、以後は気を付けます。
実際に実行して頂かないと意味がありません。
【補足】
相互リンクの意味がわからなければ質問して下さい。
それはookamiさんへの返答でも同様です。聞かれていることと回答がずれていますので。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 初めまして。
尋ねたのはNとBUFFER_SIZEのことではなく、Mr.Red さんが書きました: defineのNは構造体の名前と血液型の制限時数を定義していて、BUFFER_SIZEは128名分を定義してます。
char buf[ BUFFER_SIZE ]をなぜ定義したのか、です。
みたところプログラム内でbufは使用されていませんよね?
変更は見られないようですが……Mr.Red さんが書きました: あと、fgets()を入力するときに、BUFFER_SIZEではなくNであることに気が付きました。
次に
0,'0',"0"のそれぞれの違いを述べられますか?
あと、構造体配列について理解はありますか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 初めまして。
みなさんにお願いします。
フォーラルルールの違反となりますので、回答をお待ち頂けると助かります。
Mr.Redさんへ。
相互リンクもですが知恵袋の回答者にも失礼のないように放置しないで下さいね。
フォーラルルールの違反となりますので、回答をお待ち頂けると助かります。
Mr.Redさんへ。
相互リンクもですが知恵袋の回答者にも失礼のないように放置しないで下さいね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 初めまして。
ソフト屋さん>>
今更ですいませんが。知恵袋の回答者については私と同一人物です。
あと、相互リンクはわかりません。
涼雅さん>>
なぜchar buf[ BUFFER_SIZE ]をなぜ定義したのは、fgets()を入力するときに必須だと思ったからです。
0,'0',"0"のそれぞれの違いは、0はただの数字、'0'はNULL文字の一種、"0"は端末に表示されるだけの文字です。
構造体配列については、まだ習い始めたばかりなので理解はあんまりありません(ゼロというわけではありません)。
今更ですいませんが。知恵袋の回答者については私と同一人物です。
あと、相互リンクはわかりません。
涼雅さん>>
なぜchar buf[ BUFFER_SIZE ]をなぜ定義したのは、fgets()を入力するときに必須だと思ったからです。
0,'0',"0"のそれぞれの違いは、0はただの数字、'0'はNULL文字の一種、"0"は端末に表示されるだけの文字です。
構造体配列については、まだ習い始めたばかりなので理解はあんまりありません(ゼロというわけではありません)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 初めまして。
相互リンクは同じ質問を多数に掲示板にしている場合、その掲示板の利用者が他の掲示板でも同じ質問をしていることを分かることが出来るようにするためリンクを貼ることを言います。これで回答者の無駄骨を防ぐって意図になりますね。Mr.Red さんが書きました:ソフト屋さん>>
今更ですいませんが。知恵袋の回答者については私と同一人物です。
あと、相互リンクはわかりません。
補足を使って、次のような感じで行なって下さい。
私はこの質問を他の掲示板でもさせて頂いています。
質問しているのは下記の掲示板です。
http://dixq.net/forum/viewtopic.php?f=3&t=11008
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 初めまして。
互いにリンクすること。検索すればすぐ分かるはずですけど、、Mr.Red さんが書きました:あと、相互リンクはわかりません。
だから、知恵袋の方にも、ここのリンクをはることです(補足で書けばいいでしょう)。
なぜ貼るかといえば、もう解決してるのに一方ではまだ質問受け付けとなるのを避けるためです。
こういうのは回答者に対する礼儀として身につけるべきです。
written by へにっくす
Re: 初めまして。
# Mr.Redさん
ちょっと私の聞き方があいまいだったかもしれませんね。
1行ごとの役割を書いてほしかったのです。
言い方を変えると...
下の ○○○○○○○○ を埋めてください。
> 以下のmain関数の各行には、構造体のデータを入力する装置のような感じです。
これは、半分正解です。入力だけでなく出力もありますね。
---
ステップ実行は知っていますか?
F10キーでプログラムを開始すると、
F10キーを押すごとに1行ずつプログラムを進めることができます。
その時、変数などにマウスを当てると、変数の内容を見たりすることができます。
活用してみてください。
---
【追記】
#Softyaさん
> フォーラルルールの違反となりますので、回答をお待ち頂けると助かります。
→すみません、マルチポストの件ですね。認識しました。
# Mr.Redさん
相互リンクの対応をしてからお返事をお願いします。
ちょっと私の聞き方があいまいだったかもしれませんね。
1行ごとの役割を書いてほしかったのです。
言い方を変えると...
下の ○○○○○○○○ を埋めてください。
int main(void)//main関数
{
struct data p;
int n; //nは人数(最大128人)分とする
char buf[BUFFER_SIZE]; //メモリ領域の用意
for(n=1; n<=BUFFER_SIZE; n++) // ○○○○○○○○
{
printf("%d人目のデータ", n); // ○○○○○○○○
fgets(p.name, BUFFER_SIZE, stdin); // ○○○○○○○○
if(p.name == 0 && p.height == 0 && p.bloodType == 0) // ○○○○○○○○
{
break;
}
}
printf("名前 身長 血液型\n"); // ○○○○○○○○
printf("%s \n", p.name); // ○○○○○○○○
printf("%f \n", p.height); // ○○○○○○○○
printf("%s \n", p.bloodType); // ○○○○○○○○
return 0;
}
これは、半分正解です。入力だけでなく出力もありますね。
---
ステップ実行は知っていますか?
F10キーでプログラムを開始すると、
F10キーを押すごとに1行ずつプログラムを進めることができます。
その時、変数などにマウスを当てると、変数の内容を見たりすることができます。
活用してみてください。
---
【追記】
#Softyaさん
> フォーラルルールの違反となりますので、回答をお待ち頂けると助かります。
→すみません、マルチポストの件ですね。認識しました。
# Mr.Redさん
相互リンクの対応をしてからお返事をお願いします。
Re: 初めまして。
ookamiさん、わかりました。Mr.Red さんが書きました:返事が遅くなって本当にごめんなさい。softya(ソフト屋) さんが書きました: 相互リンクは同じ質問を多数に掲示板にしている場合、その掲示板の利用者が他の掲示板でも同じ質問をしていることを分かることが出来るようにするためリンクを貼ることを言います。これで回答者の無駄骨を防ぐって意図になりますね。
補足を使って、次のような感じで行なって下さい。
相互リンクについてありがとうございました。
では、やってみます。
http://detail.chiebukuro.yahoo.co.jp/qa ... r=pofee_pc
int main(void)//main関数
{
struct data p;
int n; //nは人数(最大128人)分とする
char buf[BUFFER_SIZE]; //メモリ領域の用意
for(n=1; n<=BUFFER_SIZE; n++) // ループで各個人のデータを表示
{
printf("%d人目のデータ", n); // 個人のデータ
fgets(p.name, BUFFER_SIZE, stdin); // 入力処理
if(p.name == 0 && p.height == 0 && p.bloodType == 0) // 0 0 0と入力した場合
{
break;
}
}
printf("名前 身長 血液型\n"); // 名前と身長と血液型の表示
printf("%s \n", p.name); // 名前
printf("%f \n", p.height); // 身長
printf("%s \n", p.bloodType); // 血液型
return 0;
}
実は今日、この一番上記の問題について自分で考えて解決できました。
涼雅さん、ookamiさん、ソフト屋さん、へにっくすさん、本当にありがとうございます。
うれしいです。
Re: 初めまして。
http://detail.chiebukuro.yahoo.co.jp/qa ... r=pofee_pc
んー?
補足じゃなくてレスでリンクされてますな。
IDが別ですけど…
※書きなおしました。
んー?
補足じゃなくてレスでリンクされてますな。
IDが別ですけど…
他の人から見たら分かりませんよ。Mr.Red さんが書きました:ソフト屋さん>>
今更ですいませんが。知恵袋の回答者については私と同一人物です。
※書きなおしました。
最後に編集したユーザー へにっくす on 2012年7月12日(木) 21:18 [ 編集 2 回目 ]
written by へにっくす
Re: 初めまして。
で、Yahoo!知恵袋はそのまま放置なんですか?M.Red さんが書きました: 実は今日、この一番上記の問題について自分で考えて解決できました。
涼雅さん、ookamiさん、ソフト屋さん、へにっくすさん、本当にありがとうございます。
うれしいです。
そういうことをやるとマルチポストが嫌われることになります。
きちんと解決方法を知恵袋のほうにも投稿して解決処理を行ってください。
知恵袋の回答者の方をないがしろにするような行為は避けてくださいね。
Advanced Supporting Developer
無理やりこじつけ(ぉ
無理やりこじつけ(ぉ
Re: 初めまして。
スレ違いで申し訳ないですが、ちかごろ気になっていたので。
へにっくす さんが書きました:すべて同一人物なんだー
こういった言葉遣いはフォーラムルールに違反している気がします。へにっくす さんが書きました:へーへーへーへーへーへーへーへー
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 初めまして。
一応ご本人にプライベートメッセージしてあるんですが、まだ見てもらっていません。ISLe さんが書きました:スレ違いで申し訳ないですが、ちかごろ気になっていたので。
へにっくす さんが書きました:すべて同一人物なんだーこういった言葉遣いはフォーラムルールに違反している気がします。へにっくす さんが書きました:へーへーへーへーへーへーへーへー
ご本人に直していただきたいと思っております。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 初めまして。
Mr.Redさん、フォーラムルールに
ソースコードや解決した方法を明記して下さい
とある通り、
解決した方法を書きこんでください。
あと今更ですが、
0, '0', "0"の違いですが、
0は数値、というのはあってます。
'0'はchar型の文字としての0であり、ヌル文字は'\0'です。(ちなみに'\0'は数値では0x00つまり0、'0'はASCIIコードでは0x30=48で異なります。)
また、"0"は端末に表示されるだけの文字、では少し説明不足です。
コンピューターの中身はすべて0と1の集合であり、数値も文字も結局は数字として表すことができます。
つまり、"ただの"文字、というのは存在しないわけです。
"0"はchar型配列{ '0', '\0' }です。
(上の話には厳密に言うとぜんぜん間違っていることが含まれているかもしれません)
最後に、マルチポストは相互リンクであるので、他の方のおっしゃっているとおり、yahooにもリンクを張り、更に解決した旨を書きこんでください。
ソースコードや解決した方法を明記して下さい
とある通り、
解決した方法を書きこんでください。
あと今更ですが、
0, '0', "0"の違いですが、
0は数値、というのはあってます。
'0'はchar型の文字としての0であり、ヌル文字は'\0'です。(ちなみに'\0'は数値では0x00つまり0、'0'はASCIIコードでは0x30=48で異なります。)
また、"0"は端末に表示されるだけの文字、では少し説明不足です。
コンピューターの中身はすべて0と1の集合であり、数値も文字も結局は数字として表すことができます。
つまり、"ただの"文字、というのは存在しないわけです。
"0"はchar型配列{ '0', '\0' }です。
(上の話には厳密に言うとぜんぜん間違っていることが含まれているかもしれません)
最後に、マルチポストは相互リンクであるので、他の方のおっしゃっているとおり、yahooにもリンクを張り、更に解決した旨を書きこんでください。
オフトピック
char型配列nameと0って0で比較できましたっけ?
あのままのコードだとエラーが発生する気がするんですが……
あのままのコードだとエラーが発生する気がするんですが……
- Dixq (管理人)
- 管理人
- 記事: 1661
- 登録日時: 13年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 初めまして。
> こういった言葉遣いはフォーラムルールに違反している気がします。
そうですね、固いことをルールとして決めたくはないのですが、
すごく仲の良い間柄であるか、一般的に明らかに良い冗談であるような言い回し等を除いて、会話は一般的に丁寧な言葉づかいで行って頂きたいと思っています。
そうですね、固いことをルールとして決めたくはないのですが、
すごく仲の良い間柄であるか、一般的に明らかに良い冗談であるような言い回し等を除いて、会話は一般的に丁寧な言葉づかいで行って頂きたいと思っています。
Re: 初めまして。
この場合の配列名は配列の先頭要素へのポインタです。涼雅 さんが書きました:オフトピックchar型配列nameと0って0で比較できましたっけ?
あのままのコードだとエラーが発生する気がするんですが……
ポインタと比較するとき、0はヌルポインタと解釈されます。
条件式として真になることはありませんが、文法上はエラーではありません。
Re: 初めまして。
知恵袋のレスでここへのリンクを提示したのは私です。
結局質問者の方は知恵袋のほうはそのまま放置、どう解決したかわからない状態になっちゃいましたね。
結局質問者の方は知恵袋のほうはそのまま放置、どう解決したかわからない状態になっちゃいましたね。
この返事はなんだったんでしょうか。非常に残念です。M.Red さんが書きました: 返事が遅くなって本当にごめんなさい。
相互リンクについてありがとうございました。
では、やってみます。
オフトピック
過去に解決してもいないのに「解決しました」とだけレスをつけ、解決法がないことを見かねた回答者の方から
回答を引き出すというテクニックを披露した方がいたので、解決例を投稿する気は起きないですね(--;)
回答を引き出すというテクニックを披露した方がいたので、解決例を投稿する気は起きないですね(--;)
Advanced Supporting Developer
無理やりこじつけ(ぉ
無理やりこじつけ(ぉ