掲示板利用宣言

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

 私は

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

掲示板2

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

No.25000

構造体とファイル入出力
投稿者---ぴよ(2005/12/29 00:04:09)


こちらのサイトの17-1-2を参考に自分なりに変更しましたが、
fprintfの前で落ちます。いろいろと調べてみましたが、
理由がぜんぜん分かりませんのでお手数ですが、よろしくお願いします。


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

struct car {
    char name[256];
    char syasyu[256];
    int haiki;
};
int main(void)
{
    FILE *fp;
    struct car data[20];
    int i = 0;
    
    if ( ( fp = fopen ( "car.dat", "a" ) == NULL ) )
    {
        printf ( "error\n" );
        exit( 1 );
    }
    while ( 1 )
    {
        printf ( "メーカー名を入力してください\n" );
        scanf ( "%s", data[i].name );
        if ( data[i].name == "end" )
        {
            break;
        }
        printf ( "車種を入力してください\n" );
        scanf ( "%s", data[i].syasyu );
        printf ( "排気量を入力してください\n" );
        scanf ( "%d", &data[i].haiki );
        fprintf ( fp, "メーカー名:%s", data[i].name );
        fprintf ( fp, "車種:%s",  data[i].syasyu );
        fprintf ( fp, "排気量:%d", &data[i].haiki );
        i++;
    }
    fclose(fp);
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:構造体とファイル入出力 25002 まきじ 2005/12/29 00:16:45
<子記事> Re:構造体とファイル入出力 25009 TT414 2005/12/29 14:02:48


No.25002

Re:構造体とファイル入出力
投稿者---まきじ(2005/12/29 00:16:45)


>if ( data[i].name == "end" )

文字列を == で比較する事はできません。

>fprintf ( fp, "排気量:%d", &data[i].haiki );

& は不要。


この投稿にコメントする

削除パスワード

No.25004

Re:構造体とファイル入出力
投稿者---wiz(2005/12/29 01:27:41)


エラーの理由はまきじさんのおっしゃっている文字列との
比較の部分ですね。

気になったところがもう一点、
struct car data[20];
と配列で定義していますが、while文でiが20以上になると。。。
しかも今回のプログラムの場合一回一回ファイルに書き出しているので
配列にしなくてもOKです。


この投稿にコメントする

削除パスワード

No.25009

Re:構造体とファイル入出力
投稿者---TT414(2005/12/29 14:02:48)


> if ( ( fp = fopen ( "car.dat", "a" ) == NULL ) )
この行が変です。
fpにfopen ( "car.dat", "a" ) == NULLの結果を代入しています。
NULLまたは(file*)1のどちらかしかfpに入りません。
そのためfprintfで落ちます。

if ( ( fp = fopen ( "car.dat", "a" ) ) == NULL )
のように括弧の位置を変えてください。


この投稿にコメントする

削除パスワード

No.25010

Re:構造体とファイル入出力
投稿者---ぴよ(2005/12/29 14:37:06)


まきじさん
wizさん
TT414さん
ありがとうございます。
おっしゃられる通りになおしたら
画面が落ちなくなりました。
ありがとうございました。


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

int main( void )
{
    FILE *fw;
    char maker[10], name[12];
    int cc;

    if( ( fw=fopen( "car.dat", "a" ) ) == NULL ) {
        printf( "ファイルがオープンできません\n" );
        exit( 1 );
    }

    while( 1 ) {
        printf( "メーカー名を入力して下さい(終了条件:end) " );
        scanf( "%s", maker );
        if( strcmp( maker, "end" ) == 0 )
            break;
        printf( "車種を入力して下さい " );
        scanf( "%s", name );
        printf( "排気量を入力して下さい " );
        scanf( "%d", &cc );

        fprintf( fw, "メーカー名:%s ", maker );
        fprintf( fw, "車種:%s ", name );
        fprintf( fw, "排気量:%d\n", cc );
    }
    fclose( fw );
    return 0;
}







この投稿にコメントする

削除パスワード

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