関数の受け渡し

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mai

関数の受け渡し

#1

投稿記事 by mai » 18年前

関数の受け渡しの問題で
次のアイウの手順を参考にプログラムを作成せよ
(ア) 氏名,出身地,年齢,体重のそれぞれの変数名をname,hc,age,weightとして,それらの情報を持つ構造体profを宣言する.また,それぞれの変数に以下の3名分の情報を代入する.
 山本一郎,東京都,22才,65.3 kg
 近藤次郎,福岡県,21才,98.2 kg
 岡田三郎,北海道,19才,72.1 kg
(イ) 氏名を引数として戻り値をprof型とする関数rirekiを作成する.
(ウ) main関数内でgets関数を用いて氏名を入力し,関数rirekiに引数として渡し,氏名,出身地,年齢,体重の各情報を戻り値として得て,それらを画面に表示する.

最初の各メンバーの部分はこのような感じになるのでしょうか 
char name
int hc
float age
どなたか模擬解答をお願いできませんでしょうか
char weight

a

Re:関数の受け渡し

#2

投稿記事 by a » 18年前

ここは学校の問題をみんなで解決する掲示板ではないと思いますよ。

ヒロ

Re:関数の受け渡し

#3

投稿記事 by ヒロ » 18年前

確かにaさんの言うことは一理ありますね・・・

maiさんもある程度自分で考えて作ってみて、
作ったソースを見せていただければ、
「こうした方がいいよ」等のアドバイスもできると思いますよ。
まずは自分で挑戦してみましょう!

なぁんてぴよぴよレベルが偉そうに言える事ではないんでしょうけど・・・

ま~く

Re:関数の受け渡し

#4

投稿記事 by ま~く » 18年前

> 最初の各メンバーの部分はこのような感じになるのでしょうか 
> char name
> int hc
> float age
> char weight

名前と出身地は文字列、年齢は整数値、体重は実数値ですよね?
そうなると以下のようになります。

char name[20]; <--- 20は適当です
char hc[20]; <--- 20は適当です
int age;
float weight;

mai

Re:関数の受け渡し

#5

投稿記事 by mai » 18年前

最初の部分はこんな感じで大丈夫でしょうか
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct prof {
char name[20];
char hc[20];
int age;
float weight;



};

struct prof a(char c[/url])
{
struct prof x;

if (strcmp(c, "山本一郎") == 0) {
strcpy(x.name, "山本一郎");
x.hc = 東京都;
x.age = 22才;
strcpy(x.weight, "65.3Kg");
}

box

Re:関数の受け渡し

#6

投稿記事 by box » 18年前

> 最初の部分はこんな感じで大丈夫でしょうか

一部が正しくありません。

> 		x.hc = 東京都;

出身地は文字列データです。名前と同じようにstrcpyを使ってください。

> 		x.age = 22才;

数値データをセットするときに、単位(才)は不要です。

> 		strcpy(x.weight, "65.3Kg");

体重は数値データです。strcpyを使ってはいけません。

mai

Re:関数の受け渡し

#7

投稿記事 by mai » 18年前

このようになおしてみたのですが大丈夫でしょうか
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct prof {
char name[20];
char hc[20];
int age;
float weight;



};

struct prof a(char c[/url])
{
struct prof x;

if (strcmp(c, "山本一郎") == 0) {
strcpy(x.name, "山本一郎");
strcpy(x.hc, "東京都");
x.age = 22;
x.weight=65.3;
}

Yuki

Re:関数の受け渡し

#8

投稿記事 by Yuki » 18年前

ちなみに、コンパイル~実行環境はありますか?

タイプするだけより、ご自分で試していただけたほうが、より理解が深まると思うのですが。

mai

Re:関数の受け渡し

#9

投稿記事 by mai » 18年前

アドバイスありがとうございます 全体的には以下のように作ってみました どうでしょうか
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct ken {
char chiji[80];
int pop;
float tmp;
char flw[30];
};
struct prof a(char c[/url])
{
struct prof x;

if (strcmp(c, "山本一郎") == 0) {
strcpy(x.name, "山本一郎");
strcpy(x.hc, "東京都");
x.age = 22;
x.weight=65.3;
}
if (strcmp(c, "近藤次郎") == 0) {
strcpy(x.name, "近藤次郎");
strcpy(x.hc, "福岡県");
x.age = 21;
x.weight=98.2;
}
if (strcmp(c, "岡田三郎") == 0) {
strcpy(x.name, "岡田三郎");
strcpy(x.hc, "北海道");
x.age = 19;
x.weight=72.1;
return x;
}

int main(void)
{
struct prof data;
char rireki[10];

while (1) {
printf("を入力してください:");
scanf("%s", rireki);
if (strcmp(rireki, "end") == 0) {
break;
}
data = a(rireki);
printf("氏 名:%s\n", data.name);
printf("出身地:%d\n", data.hc);
printf("年齢:%.1f\n", data.age);
printf("体重:%s\n\n", data.weight);
}
return 0;
}

box

Re:関数の受け渡し

#10

投稿記事 by box » 18年前

お手元にCのコンパイラはないのですか?

mai

Re:関数の受け渡し

#11

投稿記事 by mai » 18年前

すみません 学校のパソコンルームにいかなければできないです

ダッシュ

Re:関数の受け渡し

#12

投稿記事 by ダッシュ » 18年前

http://dixq.net/c/

ここの管理人さんの作られたHPです。ここの「C言語を学ぶ前に」(ページ左側の欄の一番上)にコンパイラの落とし方が紹介されています。

ダッシュ

Re:関数の受け渡し

#13

投稿記事 by ダッシュ » 18年前

なぜかアイコンがお礼になってる・・・orz

box

Re:関数の受け渡し

#14

投稿記事 by box » 18年前

> struct prof a(char c[/url])

問題文に
「(イ) 氏名を引数として戻り値をprof型とする関数rirekiを作成する.」
とあります。
関数名はaではないですね。

> return x;

return文を書く場所が正しくありません。

> printf("を入力してください:");

何の入力を求めているのか、正しく書いてください。

> scanf("%s", rireki);

問題文に
「(ウ) main関数内でgets関数を用いて氏名を入力し」
とあります。
scanfは使えないですね。
また、名前に対する変数名がrirekiというのは、ふさわしくないですね。

mai

Re:関数の受け渡し

#15

投稿記事 by mai » 18年前

boxさんがおっしゃられていた部分を変えてみましたがいかがでしょうか
gets関数の部分があまり自信がないのですが

mai

Re:関数の受け渡し

#16

投稿記事 by mai » 18年前

すみませんちゃんと貼れていませんでした 失礼しました
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct ken {
char chiji[80];
int pop;
float tmp;
char flw[30];
};
struct prof rireki(char c[/url])
{
struct prof x;

if (strcmp(c, "山本一郎") == 0) {
strcpy(x.name, "山本一郎");
strcpy(x.hc, "東京都");
x.age = 22;
x.weight=65.3;
}
if (strcmp(c, "近藤次郎") == 0) {
strcpy(x.name, "近藤次郎");
strcpy(x.hc, "福岡県");
x.age = 21;
x.weight=98.2;
}
if (strcmp(c, "岡田三郎") == 0) {
strcpy(x.name, "岡田三郎");
strcpy(x.hc, "北海道");
x.age = 19;
x.weight=72.1;
}
{
printf("正しい名前を入力して下さい\n");
exit(0);
}
return x;
}

int main(void)
{
struct prof data;
char rireki[10];

while (1) {
printf("名前を入力してください:");
gets(ss, rireki);
if (strcmp(rireki, "end") == 0) {
break;
}
data = rireki(name);
printf("氏 名:%s\n", data.name);
printf("出身地:%d\n", data.hc);
printf("年齢:%.1f\n", data.age);
printf("体重:%s\n\n", data.weight);
}
return 0;
}

box

Re:関数の受け渡し

#17

投稿記事 by box » 18年前

コンパイルすると何個かエラーが出るはずです。
エラーメッセージを見て、ご自分でどこまで修正できるか
挑戦してみてください。

mai

Re:関数の受け渡し

#18

投稿記事 by mai » 18年前

学校のパソコンルームを先生に無理を言ってお願いしてあけてもらい、コンパイルしてみましたが、以下の部分でエラーが多く確認されましたが修正不可能でした 一部を直すと前の部分でエラーが出てしまいエラーの連鎖となってしまいます
while (1) {
printf("名前を入力してください:");
gets(ss, rireki);
if (strcmp(rireki, "end") == 0) {
break;
}
data = rireki(name);
printf("氏 名:%s\n", data.name);
printf("出身地:%d\n", data.hc);
printf("年齢:%.1f\n", data.age);
printf("体重:%s\n\n", data.weight);
}

mai

Re:関数の受け渡し

#19

投稿記事 by mai » 18年前

エラーが修正できずこまっています どなたかたすけてください お願いします

box

Re:関数の受け渡し

#20

投稿記事 by box » 18年前

> エラーが修正できずこまっています どなたかたすけてください お願いします

そもそも、構造体の定義が正しくないですよ。よく確認してください。
知事名や県花名などの定義は、以前の問題のものです。

mai

Re:関数の受け渡し

#21

投稿記事 by mai » 18年前

定義の何がちがうのでしょうか。 これでいいと思って解いていたのですが

管理人

Re:関数の受け渡し

#22

投稿記事 by 管理人 » 18年前

ネットで「構造体」で調べると沢山出てきますので、まず、定義と宣言をきちんと書いて見ましょう。

ま~く

Re:関数の受け渡し

#23

投稿記事 by ま~く » 18年前

あら^^;
私がアドバイスした結果 ちゃんとprofという構造体を定義できていたじゃないですか。

> 最初の部分はこんな感じで大丈夫でしょうか
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
>
> struct prof {
> char name[20];
> char hc[20];
> int age;
> float weight;
>
>
>
> };
> ...

管理人

Re:関数の受け渡し

#24

投稿記事 by 管理人 » 18年前

maiさん、お伝えしたい事がありますので私までメールを送っていただけないでしょうか。
どうかルールを守って投稿してください。お願いします。

mai

Re:関数の受け渡し

#25

投稿記事 by mai » 18年前

大変ご迷惑をおかけしもうしわけありませんでした。 以下のようになりましたどうでしょうか
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
>
> struct prof {
> char name[20];
> char hc[20];
> int age;
> float weight;
>
};
struct prof rireki(char c[/url])
{
struct prof x;

if (strcmp(c, "山本一郎") == 0) {
strcpy(x.name, "山本一郎");
strcpy(x.hc, "東京都");
x.age = 22;
x.weight=65.3;
}
if (strcmp(c, "近藤次郎") == 0) {
strcpy(x.name, "近藤次郎");
strcpy(x.hc, "福岡県");
x.age = 21;
x.weight=98.2;
}
if (strcmp(c, "岡田三郎") == 0) {
strcpy(x.name, "岡田三郎");
strcpy(x.hc, "北海道");
x.age = 19;
x.weight=72.1;
}
{
printf("正しい名前を入力して下さい\n");
exit(0);
}
return x;
}

管理人

Re:関数の受け渡し

#26

投稿記事 by 管理人 » 18年前

いえ、投稿内容に問題があると申し上げているのではないのです。
何が規約違反かわからないのでしたら、お伝えしますので、dixqhp@gmail.comまでご連絡下さい。

閉鎖

“C言語何でも質問掲示板” へ戻る