• 締切済み

お願いします

このプログラミングを作らなきゃいけないんですけど、 どうしたらいいかまったくわかりません まず、何をすればいいのか、 どんなデバック表示されるかもわかりません 助けてください。お願いします . 個人データを格納する表を作成し,入力された学 生番号に該当する個人データを表示するプログ ラムを作成せよ. . 表は配列として定義する . 個人データは次のフィールドからなる構造体とし て定義する -学生番号(文字列(数字列)) -姓(文字列) -名前(文字列) -性別(数字)0 男1 女 演習7データの入力 . データの入力. 学生数をマクロ定義する -以下のいずれか (1) 以下の形式からなるファイルあるいはキー . 学生番号,姓,名前の文字列(文字の配列)の長 さをマクロ定義する ボードから読み込む . 学生番号(文字列) -文字列の長さは,実際に必要な長さ+1 以上 とする. . 姓(文字列). 学生一人の個人情報の構造体の型を定義する . 名前(文字列). コンパイルしてみる . 性別(数字)0 男1 女. 学生の個人情報の配列の変数を宣言する (2) あるいは構造体変数の初期設定を用いる. コンパイルしてみる 演習7手順2 . ステップ1-1つのレコードを読み,それを出力するプログラムを作 成する. -コンパイルして実行してみる . ステップ2-1つのレコードを読み,それを出力するプログラムを作 成する -レコードを出力部は1つの関数にするのが良い -入力の終了を検出する . 入力の終了はEOF の検出,あるいは学生番号が0 を入力した時とする -配列のサイズを超えた入力をしないようにチェックす る -コンパイルして実行してみる 演習7手順1 プログラミング言語(1) 6 strcmp . ヘッダ #include <string.h> . 形式 int strcmp(const char *s1, const char *s2); . 機能 s1 が指す文字列とs2 が指す文字列の大小関係(先頭から 順に1文字ずつ比較していき、異なる文字が出現したとき に、それらの文字の対に成立する大小関係とする)の比較 を行う. . 返却値 等しければ0、s1 がs2 より大きければ正の整数値、s1 がs2 より小さければ負の整数値を返す. 演習7ヒント2 演習7ヒント3 . ステップ3. 学生番号の入力を繰り返して行うようにする. -ステップ2 で入力部が完成. 入力の終了はEOF の検出,あるいは学生番号が -キーを入力する0を入力した時とする -個人データの配列で, 入力した学生番号と一 致するレコードを探す -文字列の比較はstrcmp 関数を用いる (ヘッダファイルstring.h をインクルード) -見つかればその内容を表示する -見つからなければ,その旨を表示するメッセー ジ("Not Found") を表示する

みんなの回答

  • tuyo1980
  • ベストアンサー率0% (0/2)
回答No.1

これでいいのかな? #include<stdio.h> #include<string.h> #define max 100 struct student{ char number[max]; char firstname[max]; char undername[max]; int sex; }; int main(void) { struct student seito; printf("学籍番号を入力\n"); scanf("%s",&seito.number); if(strcmp(seito.number,"0") == 0) { printf("Not Found\n"); return; } printf("名字を入力\n"); scanf("%s",&seito.firstname); printf("名前を入力\n"); scanf("%s",&seito.undername); printf("性別を入力\n"); scanf("%d",&seito.sex); printf("学籍番号:%s\n名字:%s\n名前:%s\n性別:%d\n",seito.number,seito.firstname,seito.undername,seito.sex); }

関連するQ&A

  • defineで範囲指定した文字配列について

    こんにちは。C言語初心者です。 文字の配列で下のようなプログラムを作ったとき、入力の際にdefineで指定したN以上の文字数の文字列を入力した場合、その後のプログラム次第で実行が正しかったり、セグメントエラーがでたりします。 コンパイルする際はエラーがでません。 ※その後のプログラムとは、関数strcmpやstrcpyです。 #include <stdio.h> #define N 10 main() { char a[N];   char b[N]; scanf("%s %s", a, b); printf("%s\n", a); printf("%s\n", b); }

  • レコード件数、レコード長の分からない文字列配列の定義の仕方

    あるファイルを読み込み、文字列配列に格納しようと思うのですが、 データが数件の場合もあれば、数万件の時もあるので、 数件の時にも数十万件の領域を確保しておくのは抵抗があります。 そこで一度読み込んでレコード件数、レコード長を取得し callocやmallocなどを使い、領域を定義しようと思うのですが、 どのように定義すればよいかわかりません。 char **testData; を定義してmallocを使用しようと思いましたが、その方法を教えてください。

  • ファイルから文字列を読み込んで、検索するプログラム

    以下のようなプログラムをつくりたいのですが、 どうしたらよいでしょうか?? 文字列を配列型に入れるときにわからなくなって しまうのですが。。。 ファイルからデータを順番に読み込み,メモリ上に一次元配列構造に並べて線形探索するプログラムを作成せよ. データの仕様 一行に、 「番号(スペース)読み仮名(スペース)文字列(住所)」 があり、これが10~1000行ほど、ファイルに(.dat) 入っている。 ファイルを配列に読み込んだあと、 番号を入力すると、住所が検索されてでてくる。 問題文も微妙なのですが、 これは番号の配列と住所の配列は別にして、 検索したほうがいいですよね、、? 何かヒントになることだけでも良いので、 よろしくお願いします!

  • 特定のフィールドの文字列を取得

    初心者ですがよろしくお願い致します。 □わからない事 ・特定のフィールドの文字列を取得 ・取得した文字列を配列に格納 □条件 ・mysqlにはすでにデータが登録済み ・PHPより操作 □具体例 フィールド名(hogehoge)に文字列が入っています。 AAAAAA(10000レコード) BBBBBB(5000レコード) CCCCCC(3000レコード) DDDDDD(1000レコード) ・・・・・・(・・・・レコード) 重複が多数ありますが、重複しない文字列だけを取り出して配列に格納したいと思っていますが、うまいやり方がわかりません。 どなたか教えて頂けませんか? よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • 文字列の日付を並べ替えするには?

    エクセル データーベースを作成していて、項目の中に日付データがあるのですが、 日付データの入れ方が 平成15年10月(日付なし) ならば 15.10(文字列) となっています。 レコードを日付の昇順に並べ替えたいと思っているのですが、文字列でデータが入っているためレコードを正確な順番で並べ替えることができません。 どのようにしたら日付順で並べ替えができるのか、教えてください。 お願いします。 | 日付 | 氏名  | |15.10  |中川   | |15.11  |山本   | |15.2  |坂下   | |15.3  |中畑   | 上のようなデータです。 又、できない場合、以降の入力にだけでもユーザー定義を設定しようかとも考えています。 どのようなユーザー定義を設定すると、簡単にデータを入力できるかご助言もお待ちしております。

  • Oracleストアドの互換性について

    Oracleのストアドについて質問です。 32bit版ではコンパイルが通るのに、64bit版ではコンパイルが通りません。 Ora-00918列定義が未確定がでます。 列名ではなく、列番号で指定するとコンパイルが通るようになります。 ただし、きちんと値をとってきていない。 ・Oracle10.2.0.3 x32(windowsServer2003x32)でOK。 ・Oracle10.2.0.5 x64(windowsServer2008x64)ではコンパイルエラーになります。(Ora-00918) 列定義が未確定がでます。 同じくOracle11.0.1x64(windowsServer2008x64)でも同じエラーが出ます。 文字コードはS-JISです。 Oracle10.2.0.5にアップのパッチを当てています。 64bitでなにかあるのでしょうか?

  • 番号順に配列するには?

    番号順に配列するには? A列に飛び飛びに番号が入力されていて、 その隣にデータがあります。 それをA列の番号順に、飛んでいる番号は空白にして 番号と一緒にデータを配列するにはどうしたらいいでしょうか??

  • 文字列の動的確保とポインタ配列について

    C言語についての質問です。 現在、キーボードから文字列を読み込みファイルに保存するプログラムを作成しています。 プログラムの条件は、以下の通りです。 1: キーボードから英数字(最長でMAX_LEN(1000)-1文字)を入力して文字列(文字配列)dataに格納後、画面に表示する。 2: 入力された文字列と同じ長さの文字列を格納する領域を動的に確保し、文字列dataをその領域に コピーする。なお、必要な文字配列の長さは文字列の長さ+1バイトである。 3: 文字列endが入力されるか、入力された文字列がNUM_STRING(10)個になるまで1~2の処理を繰り返す 4: 各文字列へのポインタを格納する(char *)型ポインタの配列str_p(サイズ:NUM_STRING)を定義して利用する。 5:1~2の処理が終了した後で、メモリに格納されたすべての文字列をファイルに出力する。ファイル名はoutput.txtとし、最初の行に文字列の個数を、次の行以降に入力された順番と「逆の順番」で文字 列を出力すること。 実行例 input ->st22 st22 input->st1 st1 end ファイルの中身 2 st1 st22 現在完成しているプログラムは以下の通りです。 #include<stdio.h> #include<string.h> #include <stdilb.h> #define NUM_STRING 10 #define MAX_LEN 1000 int main (void) { int n, i; char data[MAX_LEN] = {}; char *str_p[NUM_STRING]; FILE *fp; do { printf("input->"); scanf("%s", data); if (strcmp(data, "end") == 0) { break; } else { printf("%s\n", data); n++ 2の処理 } while(n <= NUM_STRING); if ((fp = fopen("output.txt", "w")) == NULL) { fprintf(stdout, "File open error\n"); } fprintf(fp, "%d\n", n); for (i = n-1; i>0; i--) fprintf(fp, "5s\n", str_p[i]); fclose (fp); return 0; } 特に動的確保のところがよく分かりません。 回答よろしくお願いします。       

  • 文字のコピー

    文字配列s[256],t[256]を用意して文字列を入力し、配列sに格納し、その後に配列s の内容を配列t にコピーするプログラムというものなんですが・・・・二つの文字型ポインタp,q で定義し,p = s,q = t として,変数p,q のみを利用してコピーします。 #include <stdio.h> int main ( void ){ char s[256]; char t[256]; char *p; char *q; printf("文字列を入力:"); scanf("%s", s ); p = s; q = t; while(*p != '\0'){ p++; q++; *q = *p; } p = '\0'; printf("文字列は%s",t); getchar(); getchar(); return(0); } ビジュアルスタジオつかってます。 しかしこのように記述するとなぜか最初の文字をよみこんでくれません。 たとえば yasuhiroとすると フasuhiroと出力してしまうのですが なにかいい解決方法はありませんか??

  • 次のプログラミングのヒントをお願いします。

    データを読み込み、中国地方の県のデータを打ち出すプログラムを作成しなさい。 ただし、中国地方かどうかを判定する部分は関数を使います。 ■県データの1行からなる構造体を受け取る関数とする(該当すればYを戻り値として返すようにする。) ■判定をする際の県名の比較は、関数側に県名の二次元配列を持ち、標準関数strcmpを使う。string.hのincludeを忘れない ■strcmp(文字列1、文字列2)は文字列が一致すれば0を返す。 【実行例】 ./p2-6-2 < pref.txt Tottori 613 3507 Shimane 761 6707 Okayama 1951 7112 Hiroshima 2879 8477 Yamaguchi 1528 6110 宜しくお願いします。どういった感じに書き込めばよいのかわかりません…