質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

3回答

3085閲覧

人数分のプロフィールを取得し、それを表示するプログラム

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

1クリップ

投稿2015/12/17 10:44

C

1#include <stdio.h> 2 3int main(){ 4 struct prof{ 5 char name[25]; 6 char job[25]; 7 char sex[10]; 8 char age[10]; 9 }; 10 int Np; 11 struct prof i; 12 13 printf("何人?>>>"); scanf_s("%d",&Np); 14 for (){ 15 printf("名前は?>>>"); gets_s(i.name); 16 printf("職業は?>>>"); gets_s(i.job); 17 printf("性別は?>>>"); gets_s(i.sex); 18 printf("年齢は?>>>"); gets_s(i.age); 19 } 20 21 for(){ 22 printf(%d人目の名前は%s",Np,i.name}; 23 printf(%d人目の職業は%s",Np,i.job}; 24 printf(%d人目の性別は%s",Np,i.sec}; 25 printf(%d人目の年齢は%s",Np,i.age}; 26 } 27 return 0; 28}

こんな感じで人数分のプロフィールを入力してもらって、最後にそれらを表示するプログラムを作りたいんですけど、変数はいくつ用意し、どのような式を書き、forの式2つあるんですけど、それぞれどう記述すればいいかわかりません。教えてください

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

例えば、下記で一応動作します。

ただし、学校のレポートっぽいので完全な答えを書くとためにならないですから、一見動作するように見えて致命的なバグを新たに1つ仕込んでます。このまま提出すると丸写しであることが簡単にバレます。意味が判れば簡単に取れるバグです。
sizeof, malloc, free, ポインタについてGoogle先生に良く聞いて、がんばってみて下さい。

あと、元々あったバグの一部は簡単に取れるのでそのまま残してます。

C++

1#include <stdio.h> 2#include <memory.h> 3 4int main() 5{ 6 int Np; 7 printf("何人?>>>"); scanf_s("%d", &Np); 8 while(getchar() != '\n') 9 { 10 } 11 12 struct prof 13 { 14 char name[25]; 15 char job[25]; 16 char sex[10]; 17 char age[10]; 18 }; 19 20 struct prof* persons=(struct prof*)malloc((sizeof(struct prof)-1)*Np); 21 22 for (int i=0; i < Np; ++i) 23 { 24 printf("名前は?>>>"); gets_s(persons[i].name, sizeof(persons[i].name)); 25 printf("職業は?>>>"); gets_s(persons[i].job, sizeof(persons[i].job)); 26 printf("性別は?>>>"); gets_s(persons[i].sex, sizeof(persons[i].sex)); 27 printf("年齢は?>>>"); gets_s(persons[i].age, sizeof(persons[i].age)); 28 } 29 30 for (int i=0; i < Np; ++i) 31 { 32 printf("%d人目の名前は%s", Np, persons[i].name); 33 printf("%d人目の職業は%s", Np, persons[i].job); 34 printf("%d人目の性別は%s", Np, persons[i].sex); 35 printf("%d人目の年齢は%s", Np, persons[i].age); 36 } 37 38 free(persons); 39 40 return 0; 41}

while(getchar() != '\n') { }については一度コメントアウトして動きを見てみて下さい。
コンソールからの入力は、通常1行単位でバッファリングされます。
つまり、Enterキーを押して初めてユーザ・プログラムへ渡されます。
従って、1とEnterを押した場合、'1'という文字とEnter文字('\n')の計2文字が渡されます。
scan_s()で'1'は読み取られるのですが、'\n'はバッファに残ってます。これらの余分な文字を捨ててます。

投稿2015/12/17 14:38

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jinco

2015/12/17 21:00

C言語触ったことがないのですが、面白そうなので実際に書いてみて↓に悩まされました。勉強になりました。 while(getchar() != '\n') { }については一度コメントアウトして動きを見てみて下さい。
退会済みユーザー

退会済みユーザー

2015/12/21 09:57

横からで申し訳ないのですが、malloc関数はstdlib.hをインクルードしなくても使えましたか・・? 最近学習し始めたばかりであまり詳しくないのですが、、
guest

0

C言語の詳しいことはわかりませんが、きっとこんな感じです。

c

1int i; 2struct prof people[Np]; 3for (i = 0; i < Np; i++){ 4... 5 gets_s(people[i].name); 6... 7} 8 9for (i = 0; i < Np; i++){ 10 int num = i+1; 11... 12 printf(%d人目の名前は%s", num, people[i].name); 13... 14}

投稿2015/12/17 13:24

編集2015/12/17 13:25
jinco

総合スコア432

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「配列」というキーワードで幸せになれるかもしれません。

投稿2015/12/17 12:16

Ruizi_Luigi

総合スコア208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問