コアダンプ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
sim
記事: 48
登録日時: 10年前

コアダンプ

#1

投稿記事 by sim » 10年前

コード:

#include<stdio.h>
#define NUM 5

typedef struct Student
{
	int no; /*番号*/
	char name[10]; /*氏名*/
	int score; /*得点*/
}Student;

/*int search(student date[],int no);*/

int main(void)
{
	Student student[NUM] =
	{
		{ 1,"taro.s",100 },
		{ 2,"jiro.y",80 },
		{ 4,"saburo.h",65 },
		{ 5,"shiro.k",20 },
		{ 8,"goro.s",93 },
	};

	int i;
	int ban;

	printf("───────────────────────────────────\n");
	printf("番号│ 氏名 │ 得点\n");
	printf("───────────────────────────────────\n");
	for (i = 0; i < NUM; i++)
	{
		printf("%4d│%10s│%5d\n", student[i].no, student[i].name, student[i].score);
	}
	printf("───────────────────────────────────\n");

	printf("検索する番号を入力してください:");
	scanf("%d", &ban);

	if (0 <= ban&&NUM > ban)
	{
		printf("番号:%d\n", student[ban].no);
		printf("氏名:%s\n", student[ban].name);
		printf("得点:%d\n", student[ban].score);

		return 0;
	}
	else
	{
		return -1;
	}
}
引数で指定された番号と一致する情報が見つかったら返す。なかったら-1を返し、見つかりませんと出力する。
コアダンプが出て出力できません。

box
記事: 2002
登録日時: 14年前

Re: コアダンプ

#2

投稿記事 by box » 10年前

sim さんが書きました: 引数で指定された番号と一致する情報が見つかったら返す。なかったら-1を返し、見つかりませんと出力する。
コアダンプの件はさておき、「引数で指定された番号」というのを表現するコードが見当たりませんし、
「見つかりません」と出力するようになっていませんね。ここはどうしましょうか。

また、「番号」というのは、
0~4
ですか?(今のコードはそうなっている)

それとも
1, 2, 4, 5, 8
ですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

sim
記事: 48
登録日時: 10年前

Re: コアダンプ

#3

投稿記事 by sim » 10年前

引数で指定された情報を出力する。入力を1だったら、番号:1 氏名:taro.s 得点:100 のようにします。
1.2.4.5.8も同様に。意外だったら-1を返し、見つかりません。とする。
よろしくお願いします。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: コアダンプ

#4

投稿記事 by みけCAT » 10年前

sim さんが書きました:コアダンプが出て出力できません。
再現できません。
Wandboxで実行すると、警告も出ずに正常終了しました。
また、ソースコードにも怪しい場所が見当たりません。
意図したコードを正しくコンパイル・実行しているか(例えばエディタで保存を忘れていないか、コンパイルするファイル名を間違えていないか、など)、
環境がおかしくなっていないかを確認してください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: コアダンプ

#5

投稿記事 by みけCAT » 10年前

sim さんが書きました:引数で指定された情報を出力する。入力を1だったら、番号:1 氏名:taro.s 得点:100 のようにします。
1.2.4.5.8も同様に。意外だったら-1を返し、見つかりません。とする。
よろしくお願いします。
banを入力した後
1. 「見つかった」フラグを表す変数を用意し、0で初期化する
2. iを0からNUMまで(NUMは含まない)ループする
 2-1. student.noとbanが等しければ、そのstudentの情報を出力し、「見つかった」フラグを表す変数に1を代入する
   等しくなければ何もしない
3. 「見つかった」フラグを表す変数が0なら、「見つかりません」と出力する
 0でないなら何もしない
という動作をするプログラムを組めばいいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

sim
記事: 48
登録日時: 10年前

Re: コアダンプ

#6

投稿記事 by sim » 10年前

Linuxでやるとコアダンプになります。

box
記事: 2002
登録日時: 14年前

Re: コアダンプ

#7

投稿記事 by box » 10年前

コード:

#include <stdio.h>

#define NUM (5)

typedef struct {
    int no;             /* 番号 */
    char name[10];      /* 氏名 */
    int score;          /* 得点 */
} Student;

int search(Student *data, int no)
{
    int i;

    for (i = 0; i < NUM; i++) {
        if (data[i].no == no) {
            return i;
        }
    }
    return -1;
}

int main(void)
{
    Student student[NUM] = {
        { 1, "taro.s",   100 },
        { 2, "jiro.y",    80 },
        { 4, "saburo.h",  65 },
        { 5, "shiro.k",   20 },
        { 8, "goro.s",    93 },
    };
    int ban, i;

    printf("────────────\n");
    printf("番号│  氏  名  │ 得点\n");
    printf("────────────\n");
    for (i = 0; i < NUM; i++) {
        printf("%4d│%10s│%5d\n",
            student[i].no, student[i].name, student[i].score);
    }
    printf("────────────\n");

    printf("検索する番号を入力してください:");
    scanf("%d", &ban);
    if ((ban = search(student, ban)) != -1) {
        printf("番号:%d\n", student[ban].no);
        printf("氏名:%s\n", student[ban].name);
        printf("得点:%d\n", student[ban].score);
    }
    else {
        printf("見つかりませんでした\n");
    }
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: コアダンプ

#8

投稿記事 by みけCAT » 10年前

sim さんが書きました:Linuxでやるとコアダンプになります。
IdeoneおよびCoiruで実行しましたが、正常終了しました。
また、DebianおよびRaspbianで実行しても正常終了しました。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

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