構造体配列について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Makoto

構造体配列について

#1

投稿記事 by Makoto » 7年前

どこが間違っているのか分からないので、助言を頂ければ幸いです。
実行例のように,5名分の学生情報(学生番号と氏名)を構造体配列に格納し,表示するプログラムを作成しなさい.
自作の関数を使う必要はありません.
文字列の代入には,標準ライブラリ関数strcpyを使いなさい.
すでに記載されている部分は書き換えてはいけません.
実行例
0人目: 学生番号 11001 名前 山田 一郎
1人目: 学生番号 11002 名前 山田 二郎
2人目: 学生番号 11003 名前 山田 三郎
3人目: 学生番号 11004 名前 山田 四郎
4人目: 学生番号 11005 名前 山田 五郎

#include <stdio.h>
#include <string.h>

int main(void)
{
struct student
{
int id; // 学生番号
char name[128]; // 名前
} st[10]; // 最大10人分の領域を確保

int i;
// ここから
// ここまでのプログラムを書きなさい
return 0;
}

コード:

#include <stdio.h>
#include <string.h>

int main(void)
{
    struct student
    {
        int id;
        char name[128];
    } st[10];
    
    int i;
    
    st[10].id={11001, 11002, 11003, 11004, 11005};
    st[10].name[128]={山田 一郎, 山田 二郎, 山田 三郎, 山田 四郎, 山田 五郎};
       
    for(i=0; i<5; i++)
    {
        printf("%dninnme: gakuseibanngou %d namae %s\n", i, st[i].id, st[i].name[128]);
    }
 
    return 0;
}

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

Re: 構造体配列について

#2

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

Makoto さんが書きました:どこが間違っているのか分からないので、助言を頂ければ幸いです。
テンプレ以外の部分はほぼ全部間違っているようなので、きちんとC言語を勉強することをおすすめします。
横着して無理にまとめようと思わないほうがいいでしょう。
また、「文字列の代入には,標準ライブラリ関数strcpyを使いなさい.」と書かれているのに、strcpyが使われていない時点で明らかにおかしいですよね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: 構造体配列について

#3

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

例えばint hoge[5];という配列の宣言があったとき、この配列全体を表すのはhogeであり、hoge[5]ではありません。
この場合の有効な添字の範囲は0~4であり、hoge[5]は範囲外なのでアクセス(読み書き)してはいけません。
st[10]やst.name[128]も同様に範囲外であり、アクセスしてはいけません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: 構造体配列について

#4

投稿記事 by box » 7年前

コード:

#if 0
どこが間違っているのか分からないので、助言を頂ければ幸いです。
実行例のように,5名分の学生情報(学生番号と氏名)を構造体配列に格納し,表示するプログラムを作成しなさい.
自作の関数を使う必要はありません.
文字列の代入には,標準ライブラリ関数strcpyを使いなさい.
すでに記載されている部分は書き換えてはいけません.
実行例
0人目: 学生番号 11001 名前 山田 一郎
1人目: 学生番号 11002 名前 山田 二郎
2人目: 学生番号 11003 名前 山田 三郎
3人目: 学生番号 11004 名前 山田 四郎
4人目: 学生番号 11005 名前 山田 五郎
#endif

#include <stdio.h>
#include <string.h>

int main(void)
{
    struct student {
        int id; // 学生番号
        char name[128]; // 名前
    } st[10]; // 最大10人分の領域を確保
    int i;

    // ここから
    for (i = 0; i < 5; i++) {
        st[i].id = 11001 + i;
    }
    strcpy(st[0].name, "山田 一郎");
    strcpy(st[1].name, "山田 二郎");
    strcpy(st[2].name, "山田 三郎");
    strcpy(st[3].name, "山田 四郎");
    strcpy(st[4].name, "山田 五郎");
    for (i = 0; i < 5; i++) {
        printf("%d人目: 学生番号 %d 名前 %s\n", i, st[i].id, st[i].name);
    }
    // ここまでのプログラムを書きなさい
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

Makoto

Re: 構造体配列について

#5

投稿記事 by Makoto » 7年前

みけCATさん、C言語をしっかりと勉強します。boxさん、みけCATさん返信ありがとうございました!

返信

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