エラー対応のTEXTファイルを作成するには?


とも  2005-07-05 20:16:23  No: 58183

自分なりに作ってはみたのですが、うまくいきません。
windowsXP,Vc++6.0です。

#include "stdio.h"
#include "stdafx.h"
char readc(void);
void writec(int c);
void writex(int x);
int c,x;
int main()
{
FILE*fp;
fp=fopen("newfile2.txt","r");
if(fp==NULL){
printf("Can't open file\n");
exit(1);
}
fprintf(fp,"stream");
if(fclose(fp==eop){
printf("Can't close file\n");
exit(1)
}

return 0;
}
レスお願いします。


Blue  2005-07-05 20:22:08  No: 58184

> エラー対応のTEXTファイルを作成するには?
意味がさっぱりわかりません。
具体的にどんなことをするかを明記してください。

> char readc(void);
> void writec(int c);
> void writex(int x);
> int c,x;

はなに?
ソースを見てもらうならばコメントつけましょう。


とも  2005-07-05 21:40:13  No: 58185

まず作成したファイルを開き、ファイルへnameの書き込み、そしてファイルを閉じるのですが、
#include "stdio.h"
#include "stdafx.h"
void writec(int neme)
  {printf("%d",name);
  }
void writec(int name)
  {printf("%x",name);
  }
char readc (void){
  int a;
  a=getchar();
  return a;
}

int main()
{
int c,i;
char name[8];
                  name[0] = 'o';
    name[1] = 'i';
    name[2] = 'o';
    name[3] = 's';
    name[4] = 'i';
    name[5] = 'o';
    name[6] = 'u';
    name[7] = 'i';

  name[i++]=c;

FILE*fp                       /ポインタ型構造体fpの宣言

fp=fopen(newfile2.txt","w")        /newfile.txt2の作成
 
fprintf(fp,"mname)
fclose(fp)
  fp=fopen("newfile2.txt","r");      /newfile.txt2の読み込み
if(fp==NULL){                      
printf("Can't open file\n");
exit(1);
}
fprintf(fp,"name");                /nameを書き込み
if(fclose(fp==eop){
printf("Can't close file\n");
exit(1)
}

return 0;
}
大幅に改良しましたがこんなことくらいしかわかりません。


まきじ  2005-07-05 22:06:39  No: 58186

1 文字ずつではなく、

char name[10]="oiosioui";

とすれば、どうでしょうか?

>name[i++]=c;

i も c も 初期化されていないのに、代入?

>fprintf(fp,"mname)

fprintf(fp,"%s",name) では?

>fp=fopen("newfile2.txt","r");  
>fprintf(fp,"name");  

読み込みモードで開いてるので、書き込みはできない。

>if(fclose(fp==eop))

eop ってなんですか?


Blue  2005-07-05 22:13:45  No: 58187

コンパイル環境はないのでしょうか?
すくなくとも、文法の間違いが多すぎます。

> int c,i;

と宣言しただけだと、値にはナニが入っているかわかりません。
その値に対して、

> name[i++]=c;

を行うとどうなるでしょうか?

> /ポインタ型構造体fpの宣言
> /newfile.txt2の作成
・・・
コメントの形式が間違っています。行コメントとしては “//”(スラッシュ2個)
でなければいけません。

> FILE*fp 
全角の*はありません。

> fprintf(fp,"mname)
文字列リテラルが閉じられていません。

あなたのソースは置いといて、実際にどのような手順で処理をしなければならないかを
箇条書きにしてみてはいかがでしょうか?
# すくなくとも、こちら側には
# > まず作成したファイルを開き、ファイルへnameの書き込み、そしてファイルを閉じるのですが、
# までしかわかりません。
# そのあとでナニをやるのでしょうか?


とも  2005-07-06 18:56:04  No: 58188

なるほど
>fprintf(fp,"name");                /nameを書き込み
はおそらく>fprintf(fp,"stream");                /streamを書き込み
かもしれません。自分自身NULL、EOPの意味がさっぱりわからないのですが、これ
でエラー対応をしようとしていることは間違いないです。つまりNULLなら
Can't open fileを表示しろ、EOPならCan't close fileを表示しろということ
なんですが…

#include "stdio.h"
#include "stdafx.h"
void writec(int neme)
    {printf("%d",name);
    }
void writec(int name)
    {printf("%x",name);
    }
char readc (void){
    int a;
    a=getchar();
    return a;
}
int c;
int main()
{

char name[10]="oiosioui";

                 
      

FILE*fp                       //ポインタ型構造体fpの宣言

fp=fopen(newfile2.txt","w")        //newfile.txt2の作成
 
fprintf(fp,"name")
fclose(fp)
  fp=fopen("newfile2.txt","r");      //newfile.txt2の読み込み
if(fp==NULL){                      
printf("Can't open file\n");
exit(1);
}
fprintf(fp,"stream");                //streamを書き込み
if(fclose(fp==eop){
printf("Can't close file\n");
exit(1)
}

return 0;
}
すいません、今コンパイル環境にないもので実行しようがないのですが、指摘されたところをなおしてみました。


とも  2005-07-06 19:02:34  No: 58189

#include "stdio.h"
#include "stdafx.h"
void writec(int neme)
    {printf("%d",name);
    }
void writec(int name)
    {printf("%x",name);
    }
char readc (void){
    int a;
    a=getchar();
    return a;
}
int c;
int main()
{

char name[10]="oiosioui";

                 
      

FILE*fp                       //ポインタ型構造体fpの宣言

fp=fopen(newfile2.txt","w")        //newfile.txt2の作成
 
fprintf(fp,"%s"name)
fclose(fp)
  fp=fopen("newfile2.txt","r");      //newfile.txt2の読み込み
if(fp==NULL){                      
printf("Can't open file\n");
exit(1);
}
fprintf(fp,"stream");                //streamを書き込み
if(fclose(fp==eop){
printf("Can't close file\n");
exit(1)
}

return 0;
}
これを忘れてました。
>fprintf(fp,"%s"name)


Blue  2005-07-06 19:06:53  No: 58190

> Can't open fileを表示しろ、EOPならCan't close fileを表示しろということ
fopenの戻り値は 成功したら FILE* の有効な値が、
失敗したら NULL が帰るようになっています。

よって、
FILE* fp;
fp = fopen( "newfile2.txt", "w" ); // newfile2.txtを"w"モードで開く
if ( fp == NULL )
{
    printf( "Can't open file\n" );
}
という処理になります。

fcloseの戻り値は 正常にファイルを閉じることが出来たら 0 が、
失敗したら EOF が帰るようになっています。

よって
if ( fclose( fp ) == EOF )
{
    printf( "Can't close file\n" );
}
という処理になります。

詳しくはここを参考にするとよいでしょう。
http://www9.plala.or.jp/sgwr-t/c/sec17.html#fclose

> windowsXP,Vc++6.0です。
は、会社や大学などの環境なのでしょうか?
VCではないのですが、フリーのコンパイラもありますので、
とりあえずはそれでコンパイルしてみてはいかがでしょうか?

参考
http://www9.plala.or.jp/sgwr-t/detail/EnvSet.html


Blue  2005-07-06 19:13:59  No: 58191

結局のところやるべきことは

あるファイル(newfile2.txt)に"name"という文字列を書き込む。
その過程で起きたエラーはコンソール画面に出力し、正常に終了できるようにする。

ということなのでしょうか?

ファイル名やnameはコンソールから入力した文字列ではなくていいのですよね?


Blue  2005-07-06 19:22:39  No: 58192

> あるファイル(newfile2.txt)に"name"という文字列を書き込む。
ごめんなさい、ちゃんとソース見てませんでした。
nameという変数に格納された文字列を書き込むのでしたね。

エラー処理をファイルを開くときと閉じるときしかやっていないのですが、
書き込む処理(fprintf)のときも必要だと思います。
(エラーの判定は先ほど紹介したサイトで調べてください。)

それと、
> fprintf(fp,"stream");                //streamを書き込み
はなんか意味があるのでしょうか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加