• ベストアンサー

ファイルからの読み込み(初心者)

#include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp; char s[256]; if ((fp = fopen("memo.txt", "r")) == NULL) { printf("file open error!!\n"); exit(EXIT_FAILURE); } while (fgets(s, 256, fp) != NULL) { printf("%s", s)         } fclose(fp);         return 0; } というファイルから1行読み込むというプログラムなのですが いくらやってもファイルが開けませんにしかなりません。 ファイル名の所が間違ってるのだとは思いますが・・ ファイルはメモ帳で作った簡素なファイルで ファイル名:memo ファイルの種類:テキスト文書(*.txt) 文字コード:ANSI 保存場所はデスクトップ です どうすれば開けるようになるのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

if ((fp = fopen("memo.txt", "r")) == NULL) { の "memo.txt" は、カレントフォルダ、つまり「実行プログラムがあるフォルダと同じフォルダ」のmemo.txtを指定している。 でも、質問者さんはmemo.txtをデスクトップに置いてる。それじゃ開けるわきゃない。 実行プログラムとmemo.txtは、同じ場所に置こう。

minaraiH
質問者

お礼

そういうことでしたか。お恥ずかしい質問でしたね。 ありがとうございました

その他の回答 (1)

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.2

> ファイル名:memo ファイル名は、拡張子付きで保存しないと、よくないと思います。 たとえば、memo.txt 実行時には、プログラムと同じディレクトリにファイル開きたいファイルが配置されている 必要がありそうです。(※相対パス使用時)

関連するQ&A

  • ファイルクローズ(fclose)でエラーを発生させる方法

    ソースには一切手を加えず、(5)ファイルのクローズでエラー表示させる方法はないでしょうか。 #include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp; /* (1)ファイルポインタの宣言 */ char s[256]; /* (2)ファイルのオープン */ /* ここで、ファイルポインタを取得する */ if ((fp = fopen("smpl.txt", "r")) == NULL) { printf("file open error!!\n"); exit(EXIT_FAILURE); /* (3)エラーの場合は通常、異常終了する */ } /* (4)ファイルの読み(書き)*/ while (fgets(s, 256, fp) != NULL) { /* ここではfgets()により1行単位で読み出し */ printf("%s", s); } if((fclose(fp)) == EOF){ /* (5)ファイルのクローズ */ Logging(cfancname, 2); printf("ファイルクローズに失敗しました\n"); return -1; } return 0; } 宜しくお願いします。

  • ファイル読み込み2

    #include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp; char s[256]; if ((fp = fopen("memo.txt", "r")) == NULL) { printf("file open error!!\n"); exit(EXIT_FAILURE); } while (fgets(s, 256, fp) != NULL) { printf("%s", s)         } fclose(fp);         return 0; } というファイルから一行入力をするプログラムなのですが これにファイルから数字だけを取り出して出力するという機能を追加したいと思います。 例えば 中央の競馬学校(騎手課程)に入る際の倍率は15~20倍です。 合格者の上限も15人という規定があります。 平成21年度の合格者は出願者114人に対し7人です。 騎手免許試験ですが新人の場合は合格率100%と考えていいと思います。 合格できる実力がなければ競馬学校(地方競馬教養センター)の課程を修了できないからです。 というファイルだと 15 20 15 21 114 7 100 というような感じです。   関数isdigitを使うやり方ならなんとなくわかるのですが 今後のことも考えてポインタを使うやり方を身につけたいと思いますのでご教授お願いします。

  • fopen関数について

    ----------------------------------------- #include<stdio.h> #include<stdlib.h> int main() { FILE *fp; char filename[80],ss[256]; printf("ファイル名="); gets(filename); if((fp=fopen(filename,"r"))==NULL){ printf("ファイルをオープンできません.\n"); exit(1); } while(fgets(ss,256,fp)!=NULL){ printf("%s",ss); } puts(""); fclose(fp); return 0; } ----------------------------------------- 初心者な内容の質問ですいません。 以上のプログラムでまず、「gets(filename);」により、「filename[80]」の配列に「aaa.txt」という文字列を格納し、そのファイルをfopenで読もう込もうとしています。 そこで、 if((fp=fopen(filename,"r"))==NULL) の部分に疑問があるのですが、「filename」という配列名だけで中身の「aaa.txt」と何故認識できるのでしょうか? 配列名ということで、先頭アドレスのみの情報しかないと思いました。 教えていただければ嬉しいです。

  • 任意のファイルを別のファイルにコピーするプログラム。

    コマンドラインからコピー元、コピー先ファイル名を指定してファイルをコピーするプログラムなんですが… #include <stdio.h> #include <stdlib.h> main(int argc, char *argv[]) { FILE *fp; if ((fp = fopen(argv[0],"r") == NULL){ printf("ファイル%sが存在しません。\n",argv[0]);exit(-1); } if ((fp = fopen(argv[1],"w") == NULL){ printf("ファイル%sがコピーできません。\n",argv[1]);exit(-1); } fclose(fp); } どこか間違っているところがあるでしょうか? ありましたら詳しく教えてもらえると幸いです。 少し自信がないのでわかる方はよろしくおねがいします。

  • 文章から改行を削除して表示する

    #include<stdio.h> #include<stdlib.h> int main(int argc, char *argv[]) { FILE *fp; char row[124]; int c; if( (fp=fopen(argv[1],"r")) == NULL){ fprintf(stderr,"eror\n"); exit(1); }else{ while(fgets( row , sizeof(row) , fp)!=NULL){ printf("%s",row); } fclose (fp); } } というコードでtex.txtという文章ファイルから改行を削除した結果を表示したかったのですが、結果としてオリジナルとまったく同じ文が出てきます。fgetsで改行はふくまれないようにしたつもりなのですが、何故でしょう?解説お願いします。 text.txt: abcdefg hijklmn opqrstuvwxyz

  • コマンドラインによるファイル名指定

    #include<stdio.h> #include<stdlib.h> int main(int argc,char *argv[]) { FILE *fp,*fpc; int i=0; char line[1000]; fp = fopen("test.txt","r"); if(fp == NULL) { printf("File not found.\n"); exit(1);  }  fpc = fopen(argv[1],"w"); if(fpc==NULL){ fprintf(stdout,"Can not open file.\n"); exit(1); } while(fgets(line[i],1000,fp)!=NULL){ i++; } for(i=3;i<0;i--){ fprintf(fpc,"%s",line[i]); } fclose(fp); fclose(fpc); return 0; } コマンドラインでファイル名を指定し、そのファイルに、test.txt(4行の文字列)の内容を各行を逆順に書き出すプログラムですが、上手くいきません。ご指摘を願いします。

  • データを読み込み

    データを読み込んで、表示するというものですが、 実行するとなぜか各行を読み込んだあとに 改行が入ってしまいます。 わかる方は何かアドバイスをお願いします。 ===================================== #include <stdio.h> #include <stdlib.h> #include <string.h> char filename[15], string[81]; main(){  FILE *fp = 0;  printf("input file:");  scanf("%s", filename);  if( (fp=fopen( filename, "r")) == NULL ){   printf("%s:don't open file", filename );   exit( 1 );  }  while(fgets( string,81, fp ) != NULL ){  printf("%s", string);  }  fclose( fp );  return 0; } =========================== test.dat : 80byte/rec =========================== 01234567890123456789012345678901234567890123456789012345678901234567890123456789 00000000000000000000000000000000000000000000000000000000000000000000000000000000 11111111111111111111111111111111111111111111111111111111111111111111111111111111

  • 大量のファイルの読み込みについて

    -512.txt~512.txtのファイルを順に読み込むプログラムを 作っています。 以下のコードのように作って動かしてみたのですが, -512から-3.txtまで入力してくれるのですが -2.txtの所でエラーが起きてしまいます. ファイルは確実に存在するのですが… fopenには大量のファイルを読み込むのは向いてないのでしょうか? 他に良い方法があれば教えて頂けると幸いです. 宜しくお願いします #include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp; int i=0; char s[256]; char filename[256]; //ファイル名編集 for(i=-512;i<512;i++){ fp=NULL; sprintf(filename,"distance\\routing_a\\%d.txt",i); printf("%sを読み込みます\n",filename); /* ここで、ファイルポインタを取得する */ if ((fp = fopen(filename, "r")) == NULL) { printf("%s file open error!!\n",filename); exit(EXIT_FAILURE); /* (3)エラーの場合は通常、異常終了する */ } } fclose(fp); /* (5)ファイルのクローズ */ return 0; } 環境 OS:windows XP 開発環境 visual studio 2008

  • C言語、ファイル操作、fgets()について

    次のプログラムは入力された行を読み込み、コマンドラインで指定されたファイルに書き込みます。 空白行が入力されたら、入力の終了とみなしてファイルを閉じます。続いてファイルを入力用に開き、 fgets()を使ってファイルの内容を表示するものです。 (ソースコードが長くてすみません) #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { FILE *fp; char str[80]; /* コマンドライン引数を検査する */ if(argc!=2) { printf("ファイル名を指定してください\n"); exit(1); } /* 出力用にファイルを開く */ if((fp = fopen(argv[1], "w"))==NULL) { printf("ファイルを開くことができません\n"); exit(1); } printf("終了するには空白行を入力してください\n"); do { printf(": "); gets(str); strcat(str, "\n"); /* 改行を追加する */ if(*str != '\n') fputs(str, fp); } while(*str != '\n'); fclose(fp); /* 入力用にファイルを開く */ if((fp = fopen(argv[1], "r"))==NULL) { printf("ファイルを開くことができません\n"); exit(1); } /* ファイルを読み込み直す */ do { fgets(str, 79, fp); if(!feof(fp)) printf(str); } while(!feof(fp)); fclose(fp); return 0; } 【質問】fgets()内のint型の数値「79」がどうして79なのかが分かりません。     80でも良いような気がするのですが・・・

  • ファイルから文字列を読み出して16進数に変換

    test1.txtというファイルから文字列を読み出して16進数に変換、という処理をしたいのですがうまくいきません。どこがどう悪いのでしょうか?ご教授のほどお願いします。 ---------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { FILE *fp; char *fname = "test1.txt"; char str[100]; int num; fp = fopen( fname, "r" ); if( fp == NULL ){ printf( "%s is not open.\n", fname ); return -1; } while( fgets(str, 100, fp ) != NULL ){ num = strtol(str, NULL, 16); printf( "%s", str ); printf("%x\n", num); //ここでうまく出力されません } fclose( fp ); return 0; } ---------------- ちなみに、test1.txtの中身は以下のようになってます。 44DB4147E6075A92E878EB68C44DD51F 5DCE86622D846BF272215A792AF31A3E 46FF69A29D3DF1D4842461B239256C26