ショッピングモール  掲示板ランキング


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

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

 詳しくはこちら



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

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


管理者用メニュー    ツリーに戻る    ホームページ    使用可能タグ一覧

No.2600

構造体
投稿者---チェリーC(2004/08/31 15:00:40)


過去ログを見ながら勉強していたのですが、
下のプログラムがうまく動作しません。
構造体の中に定義している
nameを
char name[80];
と定義してあげるとうまく動作するのですが・・・
ポインタ定義した場合どこをなおせばよいのでしょうか?

#include<stdio.h>
#include<stdlib.h>
#define SEITO_MAX 3

    struct SEITO{
    int no;
    char *name;
    int point;
    };

int GetData(struct SEITO *sei);

main(){
    struct SEITO seito[SEITO_MAX];
    int i;
    int total;
    
    total=GetData(seito);

    printf("平均点は%.2f点\n",(double)total/SEITO_MAX);

    for(i=0;i<SEITO_MAX;i++){
        printf("出席番号%d 名前:%s 点数:%d\n",seito[i].no,seito[i].name,seito[i].point);
    }
}

int GetData(struct SEITO *sei){

    int i;
    int totalpoint=0;
    
    for(i=0;i<SEITO_MAX;i++){
        printf("%d人目の生徒番号を入力してください",i+1);
        scanf("%d",&sei[i].no);
        printf("%d人目の生徒の名前を入力してください",i+1);
        scanf("%s",sei[i].name);
        printf("%d人目の生徒の点数を入力してください",i+1);
        scanf("%d",&sei[i].point);
        totalpoint+=sei[i].point;
    }
    return totalpoint;
}




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:構造体 2601 nop 2004/08/31 15:23:42


No.2601

Re:構造体
投稿者---nop(2004/08/31 15:23:42)


>char *name;
>scanf("%s",sei[i].name);

文字列を格納する領域が確保されていません。
ポインタはあくまで、「何らかのオブジェクトを指す値」を保持するもので、
オブジェクト自体の領域は持ちません。
文字列を格納するための領域を、
malloc()やcalloc()等で確保し、
sei[i].nameに代入して下さい。



この投稿にコメントする

削除パスワード

No.2602

Re:構造体
投稿者---チェリーC(2004/08/31 15:45:02)


ありがとうございます。

sei[i].name = (char*)malloc(sizeof(char)*50);

関数GetData内のfor文のはじめに上の行を追加すると
正常に動作しました。
ただここで50と指定しましたが、これをどんなサイズ(入力文字数)にも
対応できるようにする場合はどうすればよいのでしょうか?


この投稿にコメントする

削除パスワード

No.2603

Re:構造体
投稿者---nop(2004/08/31 15:55:47)


>ただここで50と指定しましたが、これをどんなサイズ(入力文字数)にも
>対応できるようにする場合はどうすればよいのでしょうか?

scanf()を使用している限りは無理でしょう。
fgets()+realloc()の組み合わせになるかと思います。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    ホームページ    レンタル掲示板サービス




掲示板提供:Real Integrity