構造体

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

構造体

#1

投稿記事 by takekkumaaan » 6年前

☆構造体¥
最後に編集したユーザー takekkumaaan on 2017年6月07日(水) 11:54 [ 編集 2 回目 ]

かずま

Re: 上司からの問題が難しくて教えて欲しいです。構造体

#2

投稿記事 by かずま » 6年前

次のプログラムは参考になりますか?
何が分かっって、何が分からないか返事を下さい。

コード:

#include <stdio.h>   // printf, fopen, fclose, fscanf, fprintf
#include <stdlib.h>  // malloc, srand, rand
#include <time.h>    // time

#define SAVEFILE "save.txt"

struct LIST {
    struct LIST *next;
    int value;
};

struct LIST *plist = NULL;

int main(void)
{
    FILE *fp = fopen(SAVEFILE, "r");
    srand((unsigned)time(NULL));

    while (1) {
        int random = 0;
        if (fp && fscanf(fp, "%d", &random) != 1) {
            fclose(fp);
            fp = NULL;
        }
        if (!fp) {
            int q = getchar();
            if (q == 'q') break;
            if (q != '\n') continue;
            random = rand() % 1000;
            if (random < 100) random += 100;
        }

        struct LIST *p = (struct LIST *) malloc(sizeof(struct LIST));
        p->value = random;
        p->next = NULL;

        if (plist == NULL)
            plist = p;
        else {
            struct LIST *prev = plist;
            while (prev->next != NULL) prev = prev->next;
            prev->next = p;
        }
        if (!fp) printf(" %d\n", p->value);
    }

    fp = fopen(SAVEFILE, "w");
    struct LIST *p = plist;
    while (p != NULL) {
        if (fp) fprintf(fp, "%d\n", p->value);
        printf("\n%d", p->value);
        p = p->next;
    }
    if (fp) fclose(fp);

    getchar();
    getchar();
    return 0;
}
このプログラムをどこから起動してもよいようにするためには
SAVEFILE をフルパスにするとか、ユーザごとに異なったファイルにする
などの修正が必要でしょう。

質問するときは、フォーラムルールをよく読んで、
プログラムを添付するときは、codeタグを使うようにしてください。

アバター
asd
記事: 319
登録日時: 13年前

Re: 上司からの問題が難しくて教えて欲しいです。構造体

#3

投稿記事 by asd » 6年前

同じような質問がありましたので参考までにどうぞ。
https://detail.chiebukuro.yahoo.co.jp/q ... 3175061523
オフトピック
上司からの問題ということはお仕事でされているのでしょうか?
だとすると今後仕事でのプログラムもここで作成代行者を募るおつもりでしょうか?
Advanced Supporting Developer
無理やりこじつけ(ぉ

takekkumaaan
記事: 3
登録日時: 6年前

Re: 上司からの問題が難しくて教えて欲しいです。構造体

#4

投稿記事 by takekkumaaan » 6年前

To. かずまさん

ありがとうございます!!
私がわからなかったのは、一度プログラムを終了して次のプログラムを実行した際に
どうすれば前回のデータを再表示することが出来るのだろう、と悩んでおりました。
C言語を始めて1ヵ月程度で自分でも何が分かっていないのか把握出来ていない部分があります。
これからはまずは何がわからないのかを書いて皆様に助けてもらおうと思います。
本当にありがとうございます!!

ソースコードの書き方などのルールも今後気をつけます。

takekkumaaan
記事: 3
登録日時: 6年前

Re: 上司からの問題が難しくて教えて欲しいです。構造体

#5

投稿記事 by takekkumaaan » 6年前

To. asd さん

その投稿は私がしたものでした。
また、私は仕事でこれからプログラミングを使います。
が、現在研修期間として色々と自習をしています。
今回問題は、上司がこんなのをやってみたら面白いのでは?
と適当に考えた問題で、その上司が暫く会えずにいましたので答えがわからず
ずっと悩んでおりました。

今後とも精進しますが、分からないことはお聞き致しますので、
どうかよろしくお願い致します。

かずま

Re: 構造体

#6

投稿記事 by かずま » 6年前

プログラムはまだ完成していませんよ。
考えないといけないことがいくつかあります。

random をリストに追加するとき、いつも先頭からたどって
末尾を探していますが、それは無駄だとは思いませんか?
末尾へのポインタを持っていれば探す必要がありませんよね。

random を求めるとき、0~999 の 1000個のうち、
0~99 の 100個を 100~199 に補正していますが、
こんなことをすると、100~199 が 200~999 の倍の
確率で出やすくなってしまいます。
random = rand() % 900 + 100; とするほうが良いと思いませんか?

plist はグローバル変数にする必要があるでしょうか?

SAVEFILE をどうするかもあります。このプログラムを動かすのが
Linux上なのか、Windows上なのか、その他なのかにも依存します。

かずま

Re: 構造体

#7

投稿記事 by かずま » 6年前

質問を削除しないでください。
もう一度、投稿してください。
そうでないと、あとからこの議論を読んだ人が理解できません。

naohiro19
記事: 256
登録日時: 13年前
住所: 愛知県

Re: 構造体

#8

投稿記事 by naohiro19 » 6年前

質問者はフォーラムルールの禁止されている事項
「自分勝手な都合で記事を削除する行為」
に違反しているため、No.1の記事を通報しました。

アバター
asd
記事: 319
登録日時: 13年前

Re: 上司からの問題が難しくて教えて欲しいです。構造体

#9

投稿記事 by asd » 6年前

takekkumaaan さんが書きました:To. asd さん

その投稿は私がしたものでした。
また、私は仕事でこれからプログラミングを使います。
が、現在研修期間として色々と自習をしています。
今回問題は、上司がこんなのをやってみたら面白いのでは?
と適当に考えた問題で、その上司が暫く会えずにいましたので答えがわからず
ずっと悩んでおりました。

今後とも精進しますが、分からないことはお聞き致しますので、
どうかよろしくお願い致します。
そうであれば「元質問を削除し、かずまさんの質問に答えようとしない」のは矛盾した行動ではないでしょうか?
プログラム本体に対しての踏み込んだ質問がないままですし。
分からない部分があれば具体的に質問いただければまだしもそれさえされないのはなぜでしょうね。

また質問をなされる場合はフォーラムルールをよく読み、マルチポストに対する対応やいただいた回答に真摯に対応されるようお願いします。
少なくともマルチポスト先にあるような「誰かに作ってもらったプログラムを丸ごとコピーする姿勢」は研修として意味をなさないことになると指摘しておきます。

後から閲覧された方のために元質問を張り付けておきます(原文ママ)
---
► スポイラーを表示
Advanced Supporting Developer
無理やりこじつけ(ぉ

返信

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