• ベストアンサー

fflushと入力モードのストリーム

C言語の質問です。 fflushはstdinに対して行ってはいけない(最近のコンパイラはstdinはOKしているみたいですが)と聞きますが、入力モード("r"とか)のストリームに対して行ってはいけませんか? 回答よろしくお願いします。

noname#113783
noname#113783

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

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

> 最近のコンパイラはstdinはOKしているみたいですが 最近とか、そういう問題ではありません。 > 入力モード("r"とか)のストリームに対して行ってはいけませんか? 未定義の動作になります。

noname#113783
質問者

お礼

>>最近とか、そういう問題ではありません。 正しくは動作が保障されているコンパイラもある、でしたね。 >>未定義の動作になります。 未定義なんですね。プログラムを組んだら変な動作になったので、別の方法で何とかすることにします。

関連するQ&A

  • ストリームについて

    ストリームってよくファイル操作の時に聞きますが 最近、stdinとかsdterrとかかかわってくるとまたストリームという単語がでてきます・・・・ いったいストリームという行為は目に見えないところでどんなことがおきているんですか??

  • 入力されたとき,何も入力しない,もしくは20字以上だと再入力のプログラム??

    こんにちわ, 今Cの勉強をしているんですが,入力をして,何も入力しないもしくは20字以上だと再入力させるのプログラムを作りたいんですけどどうしたらよろしいでしょうか。 char sk[21]; start1: while(stdin = " puts("入力"); if ((*fgets(sk,sizeof(sk),stdin) < 0x21) || strlen(sk) >= 21 ) {   puts("error");   goto start1; } だと,20字以上のときにstdinのバッファに残ってしまってエラー表示が2度出ます。 ちなみにfflush(stdin)は使用できないANSI C規格です。 よろしくお願いします。

  • fflush()、setbuf()について

    C言語にお詳しい方、ご回答お願いします。 fflush関数は、「バッファに格納されているデータを吐き出す。」とあるのですが、具体的にどのような動作をするのでしょうか? (1)fflush(stdin),fflush(stdout)とそれぞれ記述するとどのような動作をするのか。 (2)データをフラッシュしたいときとは、具体的にどんなときか。(scanfなどで続けてデータの入力を行うこと以外に) setbuf関数は、「出力バッファをユーザバッファに指定」とあるのですが、具体的にどういう意味なのでしょうか? (1)setbuf(stdout,buf)、setbuf(stdin,buf)とそれぞれ記述するとどのような動作をするのか。 よろしくお願いします。

  • 入力モードが「ひらがわ」に切り替わらない!

    Okwaveで質問をしたり、回答をしたりするとき、入力モードが半角英数になってしまい、どうしても日本語で入力できないことがあります。2つのケースがあります。1つは、言語バーの入力モードが「半角英数」(A)になってしまって、どうしても「ひらがな」(あ)に切り替わらないとき、もう一つは言語バーのところは「ひらがな」(あ)のモードになっているのに、文字を打ち込むと、半角英数で出てきて、どうしても日本語が入力できないときです。これを書いているときは、たまたま、入力モードのご機嫌?がよく、日本語(漢字ひらがな)を入力することができています。この問題に対処するにはどうしたらよいでしょうか、同じ問題に出会って解決されたかたのアドバイスをいたただければ幸いと思います。

  • fflush(stdin)の使い方とprintf()関数getchar()関数の違いについて

    はじめまして。 現在c++を勉強し始めて1週間の初心者です。 fflush(stdin)について質問です。下記のプログラムで小文字入力したアルファベット1文字を大文字に変換して出力しています。方法(1)ではgetchar()関数とputchar()関数を使用していますがどうしてこの場合にはfflush(stdin)が必要となり、方法(2)のprintf()関数とscanf()関数を使用した場合はfflush(stdin)が必要ないのでしょうか?どなたか私のような初心者でも分かるように詳しく説明してもらいたいです。 何故かプログラムを書いているとprintf()とscanf()がよく混乱します。原因として、printf()を先に書く場合と、scanf()を先に書く場合が有るからだと思っているのですが、まだよく理屈の理解ができません。なので出来ればこれらの関数についても基本的な概念を教えていただきたいです。それと方法(2)では何故最後にscanf(%c):が無くても良いのかも良く理解できません。 どなたか是非とも回答宜しくお願いします。 #include <stdio> main void() { 方法(1) printf("\n文字を1つ入力してください:"); fflush(stdin);    char ch=getchar(); ch=ch-32; putchar(ch);    方法(2) printf("\n文字を1つ入力してください:") //fflush(stdin);必要なし???    char ch; scanf("%c",&ch); ch=ch-32; printf("%c",ch);    //scanf(%c):??? }

  • ストリームって?

    プログラミングの超初心者なのですが、現在Cの勉強をしています。1つ分からない言葉があるのですが、「ストリーム」について教えてください。例えば「ファイルストリーム」「標準エラー出力ストリーム」「標準入力ストリーム」などです。この「ストリーム」という動作はどういった動作をさすのか教えていただければ幸いです。

  • 入力モードについて

    文字を入力する時、入力するところをクリックしたら、以前は言語バーに入力モードがすぐ出ていたようなのですが、今は入力場所をクリックしてもATOKスマイルのままで、入力モードがでないのですが・・・ どんなんでしょう? 超初心者です・・

  • DVD-VRモードの音声ストリームについて

    DVD-VRモードには音声ストリームが2本あるようなんですが、 DVD-VRで、テレビの音声多重放送(ステレオでも副音声付きでも)や 外部入力での音声が記録される場合って、その音声ストリームは 2本同時に使われているんでしょうか? それとも、DVD-Video規格での音声ストリームと同様に1本だけ?

  • 突然、入力モードが変わるときについて

     ワードを使って日本語の文章を作成しているとき、突然アルファベット表記に変わってしまい、言語バーを見ると「あ」と表記されていたところが「A」に変わってしまっており(しかもそれがなんだか四角形に囲まれたようなAになっているような気がします)、言語バーの入力モードを変えることもできず、また、キーボードの左上の「半角/全角」キーを押しても入力モードがひらがなに変わらず...ということがたまにあります。この状態についてお尋ねしたいことが二つあります。 1.当然私がどこかを間違って押してしまったからそうなるのだと思いますが、どこを押してしまったのでしょうか。 2.どうやったらすぐにもとの入力モードに戻せるでしょうか。今までは一度そこで文書を保存して、ワードを閉じ、また開けてみると日本語入力に戻っていた、というようにしていたのですが、時間がかかるので、すぐに日本語で入力できるようにしたいです。  教えていただけると助かります。どうぞよろしくお願いします。

  • ファイルを開く、ストリームを結びつける、とは?

    C言語の標準関数の説明の中に、 「ファイルを開く」 「ストリームと結びつける」 といった表現がでてくるのですが、これはどういう意味ですか? freopenを理解しようとしていたのですが・・・。 ファイルを開くとはFILE構造体を展開する?ファイルディスクリプタをシステムに登録する?・・・意味がいまいち掴めません。「ストリームと結びつける」も同様です。 これらは具体的にどういう意味なのでしょうか?回答よろしくお願いします。

専門家に質問してみよう