A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
#3です。
#4さんの言うとおり、配列の定義をヘッダに書くのはよろしくありません。
ただ、質問の中に、
「この「氏名」と「学籍番号」はあらかじめヘッダか何かに定義しておきたいのですが、」
とあったのでこうしただけです。
タグやvoidの件は私のサボりです。失礼しました。
前回の例は、きれいなプログラムを書いたわけではなく、あくまで、質問者さんの質問内容に従って書いただけです。
誤解させてしまったかもしれません。ごめんなさい
あと、やはりデータはプログラムと切り離した方が良いと思うのですが、プログラム内部にデータを持ちたい理由は何ですか? 速度にシビアなシステムなのでしょうか?
No.4
- 回答日時:
main が void を返すのもちょっとどうかと思うし, 配列の「定義」までヘッダに書いちゃうのはよろしくないですよ>#3. あと, 構造体にタグも張ってあげたいところ. 例えば
struct Meibo {
int id;
char [MAXLEN+1];
};
struct Meibo meibo[];
までをヘッダに書いて, 「配列 meibo に実際にデータを入れる」のは別のソースにする (で最後にリンクする) のが普通でしょう.
No.3
- 回答日時:
C言語なら構造体配列を使用すればよいのでは?
>数が膨大になっても対応できるようにしたい
膨大がどの程度かにもよりますが、配列の大きさを明記せず、初期値リストを指定すれば、初期値リストが入る数分の大きさにしてくれます。
大きさがわからないので、終端を示す学籍番号(例では-1)をいれました。
また、一般論ですが、データが膨大になるのであればプログラムと分離(データファイルを読み込む)した方がよいと思います。プログラム中にデータを持つと、データを書き換えるたびにコンパイルしないといけないので面倒ですし、人間は必ずミスを犯しますから、ソースファイルはなるべく触りたくありません。
(例)
#include <stdio.h>
#include <string.h>
//以下の部分をヘッダに定義
#define MAXLEN 20
struct {
int no;
char name[MAXLEN+1];
} meibo[]={
1,"a",
2,"b",
3,"c",
-1,""//学生番号ー1が最後
};
//ここまでヘッダに定義
void main(){
char name[MAXLEN+1];
scanf("%s",name);
for(int i=0;meibo[i].no!=-1;i++){
if(strcmp(meibo[i].name,name)==0){
printf("name:%s,no:%d\n",meibo[i].name,meibo[i].no);
break;
}
}
}
No.2
- 回答日時:
2つの要素である氏名と学籍番号では、学籍番号は必ず一意になります(氏名は同姓同名もある)。
そこで、学籍番号をキーにしたHashTableやMapのようなものを使われてるデータ構造にしたら、いかがでしょうか?
言語がC++なら、STLが使えるので、MAPもそのまま使えると思います。
学籍番号から氏名を取ってこれるだけでなく、氏名から学籍番号もそうなめすることで可能です。
No.1
- 回答日時:
状況がよくわかりませんが、C言語でしたら、例えば次のようにするのはどうでしょう。
氏名を name 配列に入れ、学籍番号を number 配列に入れます。
学生の総数は LIST_MAX として定義しておきます。
-- hoge.h --
#define LIST_MAX 256
char* name[LIST_MAX] = {
"A",
"B",
"C",
...
"LAST"
};
int number[LIST_MAX] = {
1,
2,
3,
...
256
}
-- hoge.c --
#include "hoge.h"
int main(void)
{
:
printf("学籍番号 %s, 氏名 %s\n", number[10], name[10]);
:
}
プログラム動作中に配列サイズを変更するならば、動的メモリ割り当て malloc などを使うことになるでしょう。もっと高度にするならば構造体や、C++なら new や class を使って抽象化していきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- その他(プログラミング・Web制作) 入力フォームへ、データを自動的に入力するプログラム。どうやって作る? 4 2023/01/16 10:24
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「名前(first name) 1 2023/06/24 13:03
- その他(データベース) c言語の問題です。これを踏まえてコーディングしたいのでおしえていただきたいです。 3 2023/08/03 09:27
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 第二回模試の3科目の各得点と合 1 2023/04/25 18:02
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「A,B組の女子の氏名のよみ。 1 2023/05/16 15:28
- その他(IT・Webサービス) CICでの情報開示について CICのインターネット開示を利用しているのですが、必要事項を入力後に確定 1 2023/04/04 16:11
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数から配列を返すには?
-
C言語の2次元配列 容量が大き...
-
配列の要素数に変数を入れたい...
-
define で 配列
-
C言語の配列のコピーについて
-
構造体のextern方法
-
ポインタを使って構造体の配列...
-
C#で構造体の配列を持った構造...
-
C言語において、 配列要素をひ...
-
コンボボックスでデフォルト値...
-
エラー:浮動小数点の不正な使用
-
c言語
-
配列の不正アクセスについて
-
c言語プログラミング 等差数列...
-
bmpやImageの配列を関数の引数...
-
C言語から質問です。
-
100個の要素を持つ1次元配列に1...
-
C#でのフィボナッチ数列
-
C言語 ファイルの指定された行...
-
配列における数値の比較について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
c言語
-
構造体のextern方法
-
define で 配列
-
C#で構造体の配列を持った構造...
-
C言語において、 配列要素をひ...
-
コンボボックスでデフォルト値...
-
2番目の最大値を求める
-
C言語の2次元配列 容量が大き...
-
C#で配列が空かを判定するには?
-
MFCのCArrayを使った二次元配列
-
C言語の課題が出たのですが自力...
-
C言語 ファイルの指定された行...
-
Cのエラー
-
ポインタを使って構造体の配列...
-
配列のアドレス部
-
char型配列をint型に代入するには
-
MFC - ダイアログボックスのPic...
-
C言語から質問です。
おすすめ情報