ページ 11

コアダンプ

Posted: 2015年8月23日(日) 18:37
by sim

コード:

#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を返し、見つかりませんと出力する。
コアダンプが出て出力できません。

Re: コアダンプ

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

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

それとも
1, 2, 4, 5, 8
ですか?

Re: コアダンプ

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

Re: コアダンプ

Posted: 2015年8月23日(日) 19:21
by みけCAT
sim さんが書きました:コアダンプが出て出力できません。
再現できません。
Wandboxで実行すると、警告も出ずに正常終了しました。
また、ソースコードにも怪しい場所が見当たりません。
意図したコードを正しくコンパイル・実行しているか(例えばエディタで保存を忘れていないか、コンパイルするファイル名を間違えていないか、など)、
環境がおかしくなっていないかを確認してください。

Re: コアダンプ

Posted: 2015年8月23日(日) 19:25
by みけCAT
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でないなら何もしない
という動作をするプログラムを組めばいいと思います。

Re: コアダンプ

Posted: 2015年8月23日(日) 19:44
by sim
Linuxでやるとコアダンプになります。

Re: コアダンプ

Posted: 2015年8月23日(日) 20:20
by box

コード:

#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;
}

Re: コアダンプ

Posted: 2015年8月23日(日) 20:44
by みけCAT
sim さんが書きました:Linuxでやるとコアダンプになります。
IdeoneおよびCoiruで実行しましたが、正常終了しました。
また、DebianおよびRaspbianで実行しても正常終了しました。