【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.22018

なぜ、表示できないの
投稿者---あきき(2005/07/21 13:38:48)


当サイトの15-3の問題を解いていますが、表示できません。その原因が分かりません。誰か助けてください。
#include   <stdio.h>

#define     NINZU   5
#define     KAMOKU  4

struct   seiseki   { //成績データ
    char   bango;//生徒版番号
    int     ten[KAMOKU];//各科目点数
    int     total;//合計点
};

int   main( void )
{
    int   i , j;
    struct  seiseki  class[NINZU] = {//初期化
        {1001,85,74,63,90,0}, 
        {1002,78,65,70,62,0}, 
        {1003,89,92,88,76,0}, 
        {1004,32,48,66,25,0}, 
        {1005,92,76,81,98,0} 
    };
    struct   seiseki  wk;//作業エリア
    struct   seiseki   *sp;//構造体のポインタ宣言
    sp = class;//構造体のアドレス設定

    printf("番号\t国語\t数学\t理科\t社会\t合計\n");
    //各人の4科目の合計点を求め、構造体に格納
    for ( i=0; i < NINZU; i++) {
        for ( j=0; j < KAMOKU; j++) {
            (sp+i)->total += (sp+i)->ten[j];//各科目の点数を合計に加算
        }
    }
    //合計点の高い順に各人を並べ替える
    for (i=0;i<NINZU-1;i++) {
        for (j=0;NINZU-i-1;j++) {
            if ((sp+j)->total < (sp+j+1)->total) {
                wk = *(sp+j);
                *(sp+j) = *(sp+j+1);
                *(sp+j+1) = wk;
            }
        }
    }
    //結果を出力フォームに従って表示

    for (i=0;i<NINZU;i++) {
        printf("%4d",(sp+i)->bango);
        for (j=0;j<KAMOKU;j++) {
            printf("%3d",(sp+i)->ten[j]);
        }
        printf("%3d\n",(sp+i)->total);
    }

    return  0;
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:なぜ、表示できないの 22020 あかま 2005/07/21 14:03:59


No.22020

Re:なぜ、表示できないの
投稿者---あかま(2005/07/21 14:03:59)


>for (i=0;i<NINZU-1;i++) {
>        for (j=0;NINZU-i-1;j++) {
内側のループの判定条件でj < が抜けてます。これを入れれば期待通りに動くかと思います。


でもなんで出力されないのかは謎なんですが。
当方bccですが、無限ループで回ってるだけかと思ったんですが実行してみるとしっかり終わるんですよね。
でも出力されてない不思議。


あと細かいところで
>char   bango;//生徒版番号
char型で表現できる値は大抵-128〜127までなので1001とか入れると変な値が出てきます。

>printf("%3d\n",(sp+i)->total);
3桁を"%3d"で出力してるので、直前の出力と混じって変な値に見えて表示されてます。
"%4d"とか" %3d"とかがよいかと。



この投稿にコメントする

削除パスワード

No.22025

Re:なぜ、表示できないの
投稿者---REE(2005/07/21 17:12:47)


>でもなんで出力されないのかは謎なんですが。
>当方bccですが、無限ループで回ってるだけかと思ったんですが実行してみ>るとしっかり終わるんですよね。
>でも出力されてない不思議。

jがNINZUをオーバーして、メモリを破壊しているからでしょう。



この投稿にコメントする

削除パスワード

No.22029

Re:なぜ、表示できないの
投稿者---あかま(2005/07/21 17:53:51)


>jがNINZUをオーバーして、メモリを破壊しているからでしょう。
よく考えればそうですね。
coreも吐かずにprintfだけ実行せず大人しく終わるので、???でした。
gccで実行したら、core吐いて止まりました。



この投稿にコメントする

削除パスワード

No.22026

Re:なぜ、表示できないの
投稿者---あきき(2005/07/21 17:26:54)


指摘されました2箇所を訂正したのですが、以下のメッセージが出ました。
ちなみに、コンパイラーはVC++です

------ ビルド開始 : プロジェクト : point.c, 構成 : Debug Win32 ------

リンクしています...
LINK : fatal error LNK1201: プログラム データベース 'c:\Documents and Settings\Akira2\My Documents\Visual Studio Projects\point.c\Debug\point.c.pdb' に書き込めません。ディスク容量不足、パスが無効、また十分な特権がない可能性があります。


この投稿にコメントする

削除パスワード

No.22028

Re:なぜ、表示できないの
投稿者---あかま(2005/07/21 17:38:48)


>ディスク容量不足、
保存しているディスクがいっぱいかもしれません。無駄なファイルを消してみてください。
>パスが無効、また十分な特権がない可能性があります。
プロジェクトファイルを消したとか、
今まで保存していた場所と違う場所に保存したりしてませんか?



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧