1時間ごとに更新!Amazon.co.jpで今売れている本トップ100   掲示板ランキング



掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

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

掲示板1

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

No.5573

ファイルの入出力について教えてください
投稿者---ザリガニです(2006/03/17 13:22:33)


練習してるんですが
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct MEMBER {
    int  ID;
    char Name[32];
    int  Age;
    struct MEMBER *next;
};

struct MEMBER *nyuuryoku(struct MEMBER *fin,struct MEMBER *head);
void itiranhyou(struct MEMBER *head);
struct MEMBER *sakujo(struct MEMBER *head, struct MEMBER *fin);
void all_re(struct MEMBER *fin,struct MEMBER *head);
int main(void) {
    int w = 0;
    struct MEMBER dmy;
    struct MEMBER *head = &dmy;
    struct MEMBER *fin;

    head = &dmy;
    head->next = NULL;
    fin = head;

        while (1){
            printf("<メニュー>\n1:追加\n2:一覧\n3:削除\n99:END\n\nNO?\n");
        scanf_s("%d", &w);
        if(w == 1){
            /*meb [i] =*/
            fin = nyuuryoku(fin,head);
            //i++;
        }
        else if(w == 2){
            itiranhyou(head);
        }
        else if(w == 3){ 
            fin = sakujo(head,fin);
        }
        else if(w == 99){
            all_re(head,fin);
            break;
        }
        }
}
void all_re(struct MEMBER *fin, struct MEMBER *head){
            struct MEMBER *a;
            struct MEMBER *g;
            for(a = head->next; a != NULL; a = g){
                g = a->next;
                free(a);
            }
        }


/*データ入力*/
struct MEMBER *nyuuryoku(struct MEMBER *fin,struct MEMBER *head){

    struct MEMBER *a;
    struct MEMBER *g;

    if((a = (struct MEMBER*)malloc(sizeof(struct MEMBER)))==NULL){       /*メモリの確保*/
            printf("確保失敗\n");
            return fin;
        }
            printf("ID?");
            scanf_s("%d", &a->ID);
       for(g = head->next; g!=NULL; g = g->next){
                if(g->ID == a->ID){
                free(a);
                return fin;
                }
            }
            printf("名前?");
            scanf_s("%s", a->Name,31);
            printf("年齢?");
            scanf_s("%d", &a->Age);
            
                a->next = NULL;
                fin->next = a;
                fin = a;
            
                return fin;
}


追加仕様
入力したデータをファイルに記録する。メニューで99が押された時にファイルにメモリ
データを記録する。
また、起動時にファイルデータがあれば、そのデータをメモリに格納する。
を付けたいんですがよくわからないんでおしえてください。
VisualC++使ってます
ファイルをオープンさるところまではわかります。
それ以降がわからないのでご教授お願いします


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ファイルの入出力について教えてください 5574 kz3 2006/03/17 13:58:29
<子記事> Re:ファイルの入出力について教えてください 5577 ザリガニです 2006/03/17 16:37:01


No.5574

Re:ファイルの入出力について教えてください
投稿者---kz3(2006/03/17 13:58:29)


>追加仕様

初めて8日目です Aですさんですか?
# 「初めて8日目です Aです」さんよりはマシだと思いますけどね。

>入力したデータをファイルに記録する。メニューで99が押された時にファイルにメモリ
>データを記録する。
>また、起動時にファイルデータがあれば、そのデータをメモリに格納する。

これ仕様ですよね?

>を付けたいんですがよくわからないんでおしえてください。

良く分からない。
何が よくわからないん ですか?
仕様が分からないんですか?

>ファイルをオープンさるところまではわかります。
>それ以降がわからないのでご教授お願いします

FILE型の変数すらないですが・・・
実際にファイルオープン・入出力・クローズしているコードはどこですか?
それを見ないと誰も答えられませんよ。

ファイルの入出力が分からなければ
17−2.ファイル入出力関数
を参考に試行錯誤してみてはどうでしょうか?

ザリガニさんは既にデータ構造をかじっているので分かると思いますよ。





この投稿にコメントする

削除パスワード

No.5575

Re:ファイルの入出力について教えてください
投稿者---ザリガニです(2006/03/17 14:35:21)


すみません今みながらやってるんですが今ひとつ理解できません。
入出力部分がよくわからないんで教えてください
仕様も何って感じなんですが・・・・・
部的に添付したのですべて添付します
「Aです」ではないので勘違いしないでください
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct MEMBER {
    int  ID;
    char Name[32];
    int  Age;
    struct MEMBER *next;
};

struct MEMBER *nyuuryoku(struct MEMBER *fin,struct MEMBER *head);
void itiranhyou(struct MEMBER *head);
struct MEMBER *sakujo(struct MEMBER *head, struct MEMBER *fin);
void all_re(struct MEMBER *fin,struct MEMBER *head);

int main(void) {
    int w = 0;
    struct MEMBER dmy;
    struct MEMBER *head = &dmy;
    struct MEMBER *fin;
    FILE *fp;

    head = &dmy;
    head->next = NULL;
    fin = head;
      
       if((fp=fopen("MEMBER_note,txt", "a"))==NULL){
        printf("ファイルが開かない\n");
        return -1;}


        while (1){
            printf("<メニュー>\n1:追加\n2:一覧\n3:削除\n99:END\n\nNO?\n");     /*表示*/
        scanf_s("%d", &w);
        if(w == 1){
            /*入力*/ 
            fin = nyuuryoku(fin,head);
    
        }
        else if(w == 2){
            itiranhyou(head);                 /*一覧表表示*/
        }
        else if(w == 3){           /*削除*/
            fin = sakujo(head,fin);
        }
        else if(w == 99){
            all_re(head,fin);

            fclose(fp);
            break;
        }
        }
}
/*メモリ解放*/
void all_re(struct MEMBER *fin, struct MEMBER *head){
            struct MEMBER *a;
            struct MEMBER *g;
            for(a = head->next; a != NULL; a = g){
                g = a->next;
                free(a);
            }
        }


/*データ入力*/
struct MEMBER *nyuuryoku(struct MEMBER *fin,struct MEMBER *head){

    struct MEMBER *a;
    struct MEMBER *g;

    if((a = (struct MEMBER*)malloc(sizeof(struct MEMBER)))==NULL){       /*メモリの確保*/
            printf("確保失敗\n");
            return fin;
        }
            printf("ID?");
            scanf_s("%d", &a->ID);
       for(g = head->next; g!=NULL; g = g->next){
                if(g->ID == a->ID){
                free(a);
                return fin;
                }
            }
            printf("名前?");
            scanf_s("%s", a->Name,31);
            printf("年齢?");
            scanf_s("%d", &a->Age);
            
                a->next = NULL;
                fin->next = a;
                fin = a;
            
                return fin;
}
/*一覧表示*/
void itiranhyou(struct MEMBER *head){

    struct MEMBER *c;

    printf("ID     名前     年齢\n");
    for(c = head->next; c!=NULL; c = c->next) {
          printf("%d     %s     %d\n", c->ID, c->Name, c->Age);
    }
}
/*削除*/
struct MEMBER *sakujo(struct MEMBER *head, struct MEMBER *fin){
    struct MEMBER *k;
    struct MEMBER *l;
    int m = 0;

    printf("ID?\n");
    scanf_s("%d", &m);
    
    for(k = head; k->next !=NULL; k = k->next){
        if(k->next->ID == m){
            l = k->next;
            k->next = k->next->next;
            if(fin->ID == m){
                fin = k;
            }
                free(l);
                return fin;
            }
        }
    }



この投稿にコメントする

削除パスワード

No.5576

Re:ファイルの入出力について教えてください
投稿者---ねこやろう(2006/03/17 15:02:46)


役に立つかもしれないし立たないかもしれないソース。

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

#define DATAMAX  256
#define FILENAME    "data.dat"

int main()
{
    int i;
    int data[DATAMAX];
    char buff[DATAMAX];
    FILE *fp;

    memset(data, -1, sizeof(data));
    fp = fopen(FILENAME, "r");
    if (fp != NULL) {
        i = 0;
        while (NULL != fgets(buff, sizeof(buff), fp)) {
            data[i++] = atoi(buff);
        }
        fclose(fp);
    }

    for (i = 0; data[i] != -1; i++) {
        printf("%03d : %d\n", i, data[i]);
    }

    fp = fopen(FILENAME, "w");
    if (fp == NULL) {
        printf("file open error.\n");
        exit(1);
    }
    for (i = 0; data[i] != -1; i++) {
        fprintf(fp, "%d\n", data[i]);
    }
    fclose(fp);

    return 0;
}



この投稿にコメントする

削除パスワード

No.5577

Re:ファイルの入出力について教えてください
投稿者---ザリガニです(2006/03/17 16:37:01)


何とかできたんですが・・・・・最後に入力したものをファイルに記録するやり方がわからないんですが教えていただけませんか。


この投稿にコメントする

削除パスワード

No.5578

Re:ファイルの入出力について教えてください
投稿者---keigo(2006/03/17 20:36:19)


> 何とかできたんですが・・・・・最後に入力したものをファイルに
> 記録するやり方がわからないんですが教えていただけませんか。


どこまでできたのでしょう?
最後に入力したものを記録することだけできないのですか?
例えば10個のデータがある時に、9個までファイル入力できるけど
10個目がファイル入力できないということでしょうか?


質問は「わからないので教えてください」ではこっちがわかりません。
「何が」「どう」わからなくて
自分では「期待結果」と予想して
でも実際は「結果」なりました。
エラーがあればエラーも詳しく書くとわかりやすくなります。
でないとレスがなかなかつきません。

ザリガニですさんの書き方ですと
「ファイルの入出力が」「?」わからなくて
自分では「?」予想して
でも実際は「?」なりました。
となります。
これでは「ファイルの入出力」がわからないと言っているだけです。
これですと「ファイルの入出力」を勉強したらいいよ。
としか返事が返せません。

もっといい聞き方があると思うのでザリガニですさんのあった聞き方を
探してもいいと思いますよ。



この投稿にコメントする

削除パスワード

No.5579

Re:ファイルの入出力について教えてください
投稿者---ザリガニです(2006/03/20 01:23:07)


説明不足で皆さんに迷惑かけてすみません
<追加仕様
入力したデータをファイルに記録する。メニューで99が押された時にファイルにメモリデータを記録する。また、起動時にファイルデータがあれば、そのデータをメモリに格納する。>
今この課題をやっているんですが、追加することをできたんですが、読み込みと書き込み別々の作業を行ってファイルを閉じるようにしたいのですがどうソースを変えたらいいのかわからないので教えていただきたいのですが・・・・・・誰かアドバイスお願いします。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct MEMBER {
    int  ID;
    char Name[32];
    int  Age;
    struct MEMBER *next;
};

struct MEMBER *nyuuryoku(struct MEMBER *fin,struct MEMBER *head);
void itiranhyou(struct MEMBER *head);
struct MEMBER *sakujo(struct MEMBER *head, struct MEMBER *fin);
void all_re(struct MEMBER *fin,struct MEMBER *head);

int main(void) {
    int w = 0;
    struct MEMBER dmy;
    struct MEMBER *head = &dmy;
    struct MEMBER *fin;
    struct MEMBER *z;
    FILE *fp;

    head = &dmy;
    z = &dmy;
    head->next = NULL;
    fin = head;
      
       if((fp=fopen("MEMBER_note.txt", "a"))==NULL){
        printf("ファイルが開かない\n");
        return -1;}
       fscanf(fp,"%d %s %d",z->ID, z->Name, z->Age);
      
        while (1){
            printf("<メニュー>\n1:追加\n2:一覧\n3:削除\n99:END\n\nNO?\n");     /*表示*/
        scanf_s("%d", &w);
        if(w == 1){
            /*入力*/ 
            fin = nyuuryoku(fin,head);
        }
        else if(w == 2){
            itiranhyou(head);                 /*一覧表表示*/
        }
        else if(w == 3){           /*削除*/
            fin = sakujo(head,fin);
        }
        else if(w == 99){
            for(z = head->next; z != NULL; z = z->next){
                fprintf(fp, "%d  %s  %d \n", z->ID, z->Name, z->Age);
            }
            fclose(fp);
            all_re(head,fin);
            break;
        }
        }
}
/*メモリ解放*/
void all_re(struct MEMBER *fin, struct MEMBER *head){
            struct MEMBER *a;
            struct MEMBER *g;
            for(a = head->next; a != NULL; a = g){
                g = a->next;
                free(a);
            }
        }


/*データ入力*/
struct MEMBER *nyuuryoku(struct MEMBER *fin,struct MEMBER *head){

    struct MEMBER *a;
    struct MEMBER *g;

    if((a = (struct MEMBER*)malloc(sizeof(struct MEMBER)))==NULL){       /*メモリの確保*/
            printf("確保失敗\n");
            return fin;
        }
            printf("ID?");
            scanf_s("%d", &a->ID);
       for(g = head->next; g!=NULL; g = g->next){
                if(g->ID == a->ID){
                free(a);
                return fin;
                }
            }
            printf("名前?");
            scanf_s("%s", a->Name,31);
            printf("年齢?");
            scanf_s("%d", &a->Age);
            
                a->next = NULL;
                fin->next = a;
                fin = a;
            
                return fin;
}
/*一覧表示*/
void itiranhyou(struct MEMBER *head){

    struct MEMBER *c;

    printf("ID     名前     年齢\n");
    for(c = head->next; c!=NULL; c = c->next) {
          printf("%d     %s     %d\n", c->ID, c->Name, c->Age);
    }
}
/*削除*/
struct MEMBER *sakujo(struct MEMBER *head, struct MEMBER *fin){
    struct MEMBER *k;
    struct MEMBER *l;
    int m = 0;

    printf("ID?\n");
    scanf_s("%d", &m);
    
    for(k = head; k->next !=NULL; k = k->next){
        if(k->next->ID == m){
            l = k->next;
            k->next = k->next->next;
            if(fin->ID == m){
                fin = k;
            }
                free(l);
                return fin;
            }
        }
    }



この投稿にコメントする

削除パスワード

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





掲示板提供:(有)リアル・インテグリティ