• 締切済み

ファイルにかかれた文字をよんでいく・・・、プログラム

ファイルにかかれた、文字を一文字ずつ読み込んでいき、その順番をカウントして、ある順番になったらMIDIのメッセージをはきだすというプログラムを作ってるんですが、いまいち、fscanf関数の使い方がうまくいきません。 ファイルの入出力についてはある程度わかってきたんですが・・・。 fgets関数だと、改行までいっきに読み込んじゃいますよね? fscanf以外になんかうまい方法ってあるんでしょうか? MIDIのメッセージはわかってるんですけど、それをうまくアウトプットできないんで悩んでます。

みんなの回答

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

一文字ずつ読込んでゆくのであれば、fscanf() よりも fgetc() の方が素直だ と思います。 # 質問の内容だと、fscanf() の使い方の問題かどうかも分かりませんので、自信無しです。

yabuchanchan
質問者

お礼

御回答ありがとうございました。 たとえば、空白や改行があった場合に、 どうちがってくるのかな?と思ったんです・・。

関連するQ&A

  • 文字列の読み込みに関して

    C言語で、fgetsを使って文字列ファイルから読み込みを行うと、改行もしくは指定した文字列が来ると読み込みを、止めますが途中で改行が来ても読み飛ばして。(丸)までを読み込むようにするには、どのようなコードを書けばいいのですか? 別に使う関数は、これ以外でもいいのでコードを教えてもらえますか? お願いします。

  • fgetsなどをもちいて「改ページ」までの文字列を読み込みたい

    ファイルから1行ずつデータを読み込んで処理をするプログラムを書いています。 現在はfgets関数を用いて FILE *stream; char line[100]; ~ fgets(line, 100, stream); という風に1行ずつ読み込んでいるのですが、この方法だと、改行は認識できても、「改ページ」は認識できず、改ページも行中の文字だと認識して続きを読み込んでいってしまいます。 たとえば あいうえお[改ページ] かきくけこ[改行] さしすせそ[改行] というファイルであった場合、 line配列には「あいうえお[改ページ]かきくけこ」と読み込まれてしまいます。 本当は 1回目で「あいうえお」、2回目で「かきくけこ」と読み込むようにしたいのですが、このような読み込み方はどのようにすればいいのでしょうか。 一度とりあえず改ページコードごと読み込んで、1文字ずつチェックして・・・という手作業をするしかないのでしょうか? いい方法がありましたら教えてください。

  • scanfについて

    こんにちわ。 今Cのプログラムを勉強しているんですが, puts("入力します:"); if (fscanf(stdin,"%s", name) == EOF) { puts("エラーです"); } では,改行のみの場合に,何も返さずにもう一度fscanfが読み込まれますよね。 (fscanfは改行のみの場合はそれ自身の関数が再度呼ばれると思うんですが・・・) これを改行もエラーとして表示するにはどうすればよろしいでしょうか。 ただし,入力文字は2文字以上です。 他の入力関数を用いることになってもいいんですが,わかる方,よろしくおねがいします。

  • C言語の入出力関数の違い

    C言語を勉強しています。 自分が知っている入出力を行う関数は printf scanf fprintf fscanf sprintf sscanf gets puts getc putc fgets fputs fgetc fputc なのですがそれぞれのメリット・デメリットの違いがまだあいまいです。 というかまだ上の4つくらいしかまともに使ったことがありません。 自分の考えでは、 ・上の4つは書式を指定でき、ファイルから読み込みするときなどは fgetsよりもfscanfが使いやすいと思っています。 ・スペースを読み込みたいときはscanfではなくgetsを使わなければならない。 ・システム開発でscanfを使うことは危険なのでほとんどない。 間違った考え方をしていたり、どのようなデータのときに どの関数を使うのが正しい、常識、と知っている方いらっしゃいましたら 教えてください。

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

    CまたはC++で、データごとにタブで区切られたテキストファイルを読み込む処理があります。 例) 項目1(タブ)fea 5310 a(タブ)2009(改行) 項目2(タブ)dc 6307(タブ)2012(改行) 項目3(タブ)beaf 23 t(タブ)2010(改行) fscanf で読み込もうとしたのですが、タブとスペースが同じように扱われてしまうようで、 スペースが含まれるデータがある場合、上手く読み込めませんでした。 結局、fgets で一行ずつ一時バッファに読み込んでから一文字ずつチェックして データごとに切り分けたのですが、釈然としません。 もっと簡潔な方法はないでしょうか?

  • 改行までの一文字ずつのファイル読み込み

    こんにちは。 C言語で現在ある入力ファイルを読み込んで計算し、 ファイルを出力するというプログラムを作成中なのですが、 ファイルを読み込む場合に、 改行までの値を一文字ずつ読み込むという作業をさせたいと思っています。 データは、 abc defgh ijk ..... といった感じで入力されており、 while((c = fgetc(fp)) != '\n'){ fscanf(fp, "%c", &q[i]); } と書いたのですが、セグメント例外が出て強制終了してしまいます。 初歩的なことで申し訳ないのですが、教えていただきたいと思います。よろしくおねがいします。

  • txtファイルの読込み時に1033文字を超えると

    txtファイルをfopen_s関数にモード"r"で読み込んでいます。 それをwhile (fgets(~~) != NULL) { ~ } で 1行ずつ読み込んでいるのですが、 この時1行の文字数が半角1033文字を超えていると 1034文字目からが「2行目扱い」になり 予期せぬ困った挙動を起こしてしまいます。 (Windowsのメモ帳では1035文字目から無理矢理改行表示されますが) なぜこの様な事が起こるのでしょうか? どうやって回避するのが一般的なのか教えて頂けますと幸いです。 ※OS:WindowsXP  コンパイラ:Visual C++2008 EE

  • C++で文字をカウントするプログラムを・・・

    C++で簡易的な文字をカウントするプログラムを作成しようとしています。 あるtxtファイルがあって、その中に ----------------- nannchara8 1234 #kokokara a92kv838 402853 #s82ffr kka0345 #kokomade ----------------- と記述してあります。 #kokokara~#kokomadeに書いてある特定の文字(0やaなど)の数をカウント、ただし、行頭に#のついているものはカウントしない(上に示したtxtファイル内の文字「8」のカウント結果は3・・・みたいな」)。 そんなプログラムを作りたいのですが どのようにすればいいでしょうか? ご教授願います。

  • ファイルから読み取った改行文字を消す方法

    C言語のプログラムから、テキストファイルを読み込むと、改行文字が・になってしまい、なんだか汚くみえてしまいます。 なので、ファイルから読み取った改行文字を消す方法が知りたいです。教えて下さい。

  • 文字列検索について

    文字列から検索対象文字がいくつあるかカウントする関数はありますでしょうか? strTest という変数からchar(10)の改行文字のカウントをしたいのですが。

専門家に質問してみよう