• 締切済み

ファイルについて

http://oshiete1.goo.ne.jp/kotaeru.php3?q=1526476 先日↑で質問させてもらったものです。 #include<stdio.h> #define M 10 struct data{ char author[50]; char title[100]; char publisher[100]; int year; }book[10]; int main(void)//main関数 { FILE *fp1,*fp2; if((fp1 = fopen("biblio.txt","r")) == NULL){ printf("can't open"); } else for(i=0;i<M;i++){ fscanf(fp1,"%[^,],%[^,],%[^,],%d%d",&book[i].author,&book[i].title,&book[i].publisher,&book[i].year); fprintf(fp1,"%[^,],%[^,],%[^,],%d%d",&book[i].author,&book[i].title,&book[i].publisher,&book[i].year); } fclose(fp1); return(0); } biblio.txt(作者,タイトル,出版社,年の順に10行ファイルがあります)からファイルを読み込んで表示するプログラムを作りたいんですが、なかなかうまくいきません。。 Borlandを使ってるんですがコンパイル&実行しようとすると不正命令が出ます。 これはプログラミングが悪いんでしょうか…それとも設定が間違ってるのか… ご教授よろしくお願いします。

みんなの回答

  • rits416
  • ベストアンサー率0% (0/1)
回答No.3

質問者です。 ごめんなさい。iを宣言してませんでした。 これからは気をつけます。

  • rits416
  • ベストアンサー率0% (0/1)
回答No.2

質問者です。 おそらく fprintf(fp1,"%[^,],%[^,],%[^,],%d%d",&book[i].author,&book[i].title,&book[i].publisher,&book[i].year); → printf(%s%s%s%d",book[i].author,book[i].title,book[i].publisher,book[i].year); の間違いです。

回答No.1

scanf() への引数に、year 以外には & つけなくていいですよ。プログラミングの本とかサンプルとか見てますか? printf() については、どれに対しても & いりません。

関連するQ&A

  • セグメンテーション違反

    環境はLinux・C言語です。 #include<stdio.h> #include<string.h> struct book{ char author[256]; char title[256]; char publisher[256]; int year; }; int main(void); int main(void) { FILE *fp1,*fp2; struct book data[256]={0},dummy={0}; char author[256]; char title[256]; char publisher[256]; int year; int i=0,j=0; fp1=fopen("biblio.txt","r"); while(fscanf(fp1,"%s,%s,%s,%d\n",&author[0],&title[0],&publisher[0],&year)!=EOF){ strcpy(&data[i].author[0],author); strcpy(&data[i].title[0],title); strcpy(&data[i].publisher[0],publisher); data[i].year=year; i++; } j=i; fclose(fp1); while(1){ for(i=0;i<256;i++){ if(data[i].year > data[i+1].year){ dummy=data[i]; data[i]=data[i+1]; data[i+1]=dummy; break; } } if(i==256) break; } fp2=fopen("biblio2.txt","w"); for(i=0;i<j;i++){ fwrite(&data[i],sizeof(struct book),1,fp2); } fclose(fp2); return(0); } 以上のソースで、セグメンテーションエラーが出ます。 問題は while(fscanf(fp1,"%s,%s,%s,%d\n",&author[0],&title[0],&publisher[0],&year)!=EOF){ の部分だとは思うのですが、どう改善すればいいのかわかりません。 どなたかわかる方お願い致します。 ちなみに、biblio.txtの内容は B.W.Kernighan & D.M.Ritchie,The C Programming Language,Prentice Hall,1988 H.M.Deitel & P.J.Deitel,C How to Program,Prentice Hall,2001 J.R.Hanly & E.B.Koffman,Problem Solving and Program Design in C,Addison-Wesley,2002 D.M.Etter,Introduction to C,Prentice Hall,1999 H.H.Tan & T.B.D'Orazio,C Programming for Engineering and Computer Science,McGraw-Hill,2000 です。

  • 同時にファイル読み込み 書き込み

    現在、ヒストグラムのプログラムを作成しています。 まず0~255の1000個の乱数ファイルdata.txtを読み込み、 ヒストグラムは出来たのですが、 エクセルでグラフを作りたいので、 data1.txtに書き込みたいので、下のソースでやってみましたが、 0~255のカウントが全部0になってしまします。 fp = fopen("data1.txt","w");が無ければ正常に処理されます。 どうか教えてください。よろしくお願いします。 #include <stdio.h> #define BUF 10 #define MAX 256 void count(FILE *fp , int* counter); int main(void) { FILE *fp; fp = fopen("data.txt","r"); fp = fopen("data1.txt","w"); int counter[MAX]; int i; for(i=0 ; i<MAX ; i++) { counter[i] = 0; } count(fp , counter); for(i=0 ; i<MAX ; i++) { printf("%d %d\n" , i, counter[i]); } fclose(fp); return 0; } void count(FILE* p_file , int* counter) { char buf[BUF]; while (fgets(buf , BUF , p_file) != NULL) { int n; sscanf(buf , "%d" , &n); counter[n]++; } }

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

    -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言語を使用したプログラミングで、     下記ソースのように、     ファイルへ書き込むことは可能であればご指摘お願いします。     ※上手に値が渡せていないようで、      実行すると不正な処理?で落ちてしまいます。 <書き込む方法>     1)メインプログラムで書き込むファイルのOPEN     2)サブプログラムで処理を行いファイル書き込み(1)       サブプログラムで処理を行いファイル書き込み(n)     3)メインプログラムで書き込んだファイルをCLOSE <イメージ> #include <stdafx.h> #include <stdio.h> void sub( int i, FILE *fp ); int main(){ FILE *fp; fp = fopen("c:\\0511.txt","w"); int i; for( i = 1; i < 100; i++ ){ sub( i, fp ); } fclose(fp); } void sub( int i, FILE *fp ){ char moji[2]; sprintf(moji,"%3d",i ); fprintf(fp,"%s",moji ); } <補足>VC++2005 ExpressEdition でビルドは出来ました。 お手間おかけしますが、よろしくお願いします。

  • ファイル名を複数個配列で確保したいときどうすればいいですか?

    int i; FILE *fp[5]; //ここの宣言がわかりません char *(filename[5])={"1.txt","2.txt","3.txt","4.txt","5.txt}; for(i=0;i<5;i++) fp[i]=fopen(filename[i],"w"); のようなことをしたいのですが、ファイル名を複数個配列に格納するにはどのようにしたらいいんでしょうか? 回答お願いします。

  • 構造体のメンバにファイルポインタがあるときの初期化について

    #include<stdio.h> typedef struct file{ FILE *fp; char filename[255]; int flag; }sFILE; main() { sFILE fp={ ,"output.txt",1100}; } のように書きたいんですが、sFILE fp={ ,"output.txt",1100};の最初のファイルポインタのところは何を入れたらいいんでしょうか?

  • c言語の初心者なんですけど、ファイルからの読み込みで、文字や,や数字を

    c言語の初心者なんですけど、ファイルからの読み込みで、文字や,や数字を読み込みたいんですけど できません。 おしえてください。 プログラムは・・・・ #include<stdio.h> #include<ctype.h> int main(void){ char x[500][4]; FILE *fp; int i,j; fp=fopen("data2.txt","r"); for(i=0;i<500;i++){ for(j=0;j<4;j++){ fscanf(fp,"%c",&x[i][j]); } printf("%c,%d,%d,%d\n",x[i][0],x[i][1],x[i][2],x[i][3]); } fclose(fp); } ファイルは 田中,5,abc,18 鈴木,89,57,21 佐藤,,8,69 高橋,95,9,7

  • 直接ファイルへ出力できるものでしょうか?

    構造体 struct{int i,int m}i を用意しています #include <stdio.h> typedef struct{ int i[6]; /*学生番号*/ int m[6]; /*身長*/ }stu int main(void){ FILE *fp; stu s; fp("text.txt","w"); while(gets(s)!=NULL){ fputs(s,fp); } fclose(fp); } これを動かそうと思ってもダメなのは自分でもよくわかります。 構造体へダイレクトにいれてファイル出力というのは無謀なのでしょうか? 一度構造体にきちんと取り込んだ後で改めてファイルへ出力するのが正式なのでしょうか? 教えてください

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

    #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行の文字列)の内容を各行を逆順に書き出すプログラムですが、上手くいきません。ご指摘を願いします。

  • ファイルに文字列を書く

    ファイルを2つ読み込んでファイルを書き直そうとしたのですが 2度目に書き込もうとしたときに改行の書き込みがおかしくなってしまいます してほしいところで改行を一回だけしてほしいと思っているのですが 実際には多数改行されます どうしたら改行が一回だけになりますか? ---ソース--- #include <stdio.h> void main(void){ FILE *fp; char *tm[1000]; char buf[400]; int i=1,sei; fp= fopen("now.txt","w+"); fprintf(fp,"もも"); fclose(fp); //何で最初に書き込んでるんだ? //という突っ込みがあるでしょうが本当に作りたいプログラムは最初にファイルに書き込まないといけないためです。 fp= fopen("now.txt","r"); while( fgets( buf, 400, fp ) != NULL ){ tm[0]=(char*)malloc(strlen(buf)+1); strcpy(tm[0], buf); } fclose(fp); fp =fopen("moto.txt","r"); while( fgets( buf, 400, fp ) != NULL ){ if(i<999){ tm[i] = (char*)malloc(strlen(buf+1)); strcpy(tm[i], buf); i++; } else{ tm[999] = (char*)malloc(strlen(buf+1)); strcpy(tm[999], buf); } } fclose(fp); if(i<1000){ sei=i; } else{ sei=1000; } fp =fopen("chat_deta.txt","w+"); for(i=0;i<sei;i++){ fprintf(fp,"%s\n",tm[i]); } if(i!=(sei-1)){ fprintf(fp,"\n"); } for(i=0;i<sei;i++){ free(tm[i]); } fclose(fp); } } ---now.txt--- もも ---moto.txt--- オレンジ みかん

専門家に質問してみよう