課題です。。
Re:課題です。。
ファイルのオープンといいますと、こんなのしか思い浮かばないんです。。
すみません、何度も・・・もし全然的外れでしたら悪いので返信下さらなくてもいいんですが、お時間あれば
お願いします。
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE*fin;
char buf[256];
char filename1[/url]="rep1.txt";
if((fin = fopren(filename1,"r")) == NULL){
printf("%sをオープンできません.\n",filename1);
exit(1);
}
while (fgets(buf,256,fin) !=NULL){
printf("%s",buf);
}
すみません、何度も・・・もし全然的外れでしたら悪いので返信下さらなくてもいいんですが、お時間あれば
お願いします。
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE*fin;
char buf[256];
char filename1[/url]="rep1.txt";
if((fin = fopren(filename1,"r")) == NULL){
printf("%sをオープンできません.\n",filename1);
exit(1);
}
while (fgets(buf,256,fin) !=NULL){
printf("%s",buf);
}
Re:課題です。。
気になった点とヒントをいくつか。
・#define CRLF '??'
??を改行文字に置き換えてみる。
なぜCRLFとしたかは、余裕がある時に調べてもらえればいいです。
・int main(void) -> int main(コマンドライン引数)
このvoidの所でコマンドラインからファイル名を取得します。
・char buf[256] -> unsigned int buf;
注意:あくまでも、ファイルの行数をカウントするだけで、
内容の取得を意識していませんので。
また、全角文字対策の為にint ではなくunsigned int を使用しました。
・int flcount = 0;
ファイル内の行数値を初期化
・switch(コマンドライン引数の総個数)
case 2:
default:
コマンドライン引数が誤りの場合の処理を追加
・if((fin = fopren() -> if((fin = fopen()
・while (fgets(buf,256,fin) !=NULL) -> while (fgets(fin) != ???)
???に当てはまるファイルの終端を表す文字は?
また、この中でflcountをカウントアップ
・fclose(fin);
・printf("%s",buf); -> printf("%d", flcount);
ファイルクローズした後に結果表示
・int mainとしたので、return( 0 ); を返しておきます。
・#define CRLF '??'
??を改行文字に置き換えてみる。
なぜCRLFとしたかは、余裕がある時に調べてもらえればいいです。
・int main(void) -> int main(コマンドライン引数)
このvoidの所でコマンドラインからファイル名を取得します。
・char buf[256] -> unsigned int buf;
注意:あくまでも、ファイルの行数をカウントするだけで、
内容の取得を意識していませんので。
また、全角文字対策の為にint ではなくunsigned int を使用しました。
・int flcount = 0;
ファイル内の行数値を初期化
・switch(コマンドライン引数の総個数)
case 2:
default:
コマンドライン引数が誤りの場合の処理を追加
・if((fin = fopren() -> if((fin = fopen()
・while (fgets(buf,256,fin) !=NULL) -> while (fgets(fin) != ???)
???に当てはまるファイルの終端を表す文字は?
また、この中でflcountをカウントアップ
・fclose(fin);
・printf("%s",buf); -> printf("%d", flcount);
ファイルクローズした後に結果表示
・int mainとしたので、return( 0 ); を返しておきます。
Re:課題です。。
ファイルをオープンして、ファイルから1行とってくるプログラムのサンプルがここにあります。
http://always-pg.com/c/runtime_rd/file/fgets.html
このループ内で、行数をカウントすればよいことがわかりますね。
このプログラムを参考に、また、上記の回答してくださった方々のご意見を参考に、やってみてください。
http://always-pg.com/c/runtime_rd/file/fgets.html
このループ内で、行数をカウントすればよいことがわかりますね。
このプログラムを参考に、また、上記の回答してくださった方々のご意見を参考に、やってみてください。
Re:課題です。。
むつさんへ
私には分からない点が多々ありますので教えてくだされば幸いです。
---------------
>・#define CRLF '??'
> ??を改行文字に置き換えてみる。
> なぜCRLFとしたかは、余裕がある時に調べてもらえればいいです。
「CRLF」とは 0XD 0XA のことですか。ウィンドウズのファイルをバイナリーモードで開くのなら
分かるのですが、アスキーモードで、う~む。何のことでしょう?
>・char buf[256] -> unsigned int buf;
> 注意:あくまでも、ファイルの行数をカウントするだけで、
> 内容の取得を意識していませんので。
> また、全角文字対策の為にint ではなくunsigned int を使用しました。
"1\n" の場合、または "1\d\nあ\d\n" と書かれたファイルの場合、対策はほど遠いように
思います。
>・while (fgets(buf,256,fin) !=NULL) -> while (fgets(fin) != ???)
> ???に当てはまるファイルの終端を表す文字は?
> また、この中でflcountをカウントアップ
fgets(FILE *) というCの関数はありましたか?この関数が分からないので「???」も
何のことだかさっぱりです。
>・fclose(fin);
この課題では必須とは言えないでしょう。
私には分からない点が多々ありますので教えてくだされば幸いです。
---------------
>・#define CRLF '??'
> ??を改行文字に置き換えてみる。
> なぜCRLFとしたかは、余裕がある時に調べてもらえればいいです。
「CRLF」とは 0XD 0XA のことですか。ウィンドウズのファイルをバイナリーモードで開くのなら
分かるのですが、アスキーモードで、う~む。何のことでしょう?
>・char buf[256] -> unsigned int buf;
> 注意:あくまでも、ファイルの行数をカウントするだけで、
> 内容の取得を意識していませんので。
> また、全角文字対策の為にint ではなくunsigned int を使用しました。
"1\n" の場合、または "1\d\nあ\d\n" と書かれたファイルの場合、対策はほど遠いように
思います。
>・while (fgets(buf,256,fin) !=NULL) -> while (fgets(fin) != ???)
> ???に当てはまるファイルの終端を表す文字は?
> また、この中でflcountをカウントアップ
fgets(FILE *) というCの関数はありましたか?この関数が分からないので「???」も
何のことだかさっぱりです。
>・fclose(fin);
この課題では必須とは言えないでしょう。
Re:課題です。。
>しっぽさん
質問者とは他の方ですよね。
改行コードをマクロ定義する際、当方はwindows環境を使用しているので、
CRLFという記号定数にしました。という事です。
fgetc()の間違いでした。
とはいえ、どうしてもコレを使う訳ではないので。
"1\d\nあ\d\n" とありますが、
読み込むファイルとはCソースという事でしょうか。
当方は、以下のようなデータファイルを想定していました。
質問者とは他の方ですよね。
改行コードをマクロ定義する際、当方はwindows環境を使用しているので、
CRLFという記号定数にしました。という事です。
fgetc()の間違いでした。
とはいえ、どうしてもコレを使う訳ではないので。
"1\d\nあ\d\n" とありますが、
読み込むファイルとはCソースという事でしょうか。
当方は、以下のようなデータファイルを想定していました。
++ fcount.c ++ #include <stdio.h> #define CRLF '\n' int main( int argc, char *argv[/url]) { FILE *fp; unsigned int c; int nl = 0; switch( argc ) { case 2: if(( fp = fopen(argv[1], "r") ) == NULL ) { printf( "ファイル名(%s)が誤りです。\n", argv[1] ); return( 2 ); } break; default: printf( "引数が誤りです。\n" ); return( 2 ); } while( ( c = fgetc( fp ) ) != EOF ) if( c == CRLF ) nl++; if( argc == 2 ) fclose( fp ); printf( "行数= %d\n", nl ); return( 0 ); } ++ estimate.dat ++ 材料A 200,000 材料B 150,000 工賃 50,000