- ベストアンサー
fflushと入力モードのストリーム
C言語の質問です。 fflushはstdinに対して行ってはいけない(最近のコンパイラはstdinはOKしているみたいですが)と聞きますが、入力モード("r"とか)のストリームに対して行ってはいけませんか? 回答よろしくお願いします。
- C・C++・C#
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> 最近のコンパイラはstdinはOKしているみたいですが 最近とか、そういう問題ではありません。 > 入力モード("r"とか)のストリームに対して行ってはいけませんか? 未定義の動作になります。
関連するQ&A
- 入力されたとき,何も入力しない,もしくは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規格です。 よろしくお願いします。
- 締切済み
- C・C++・C#
- fflush()、setbuf()について
C言語にお詳しい方、ご回答お願いします。 fflush関数は、「バッファに格納されているデータを吐き出す。」とあるのですが、具体的にどのような動作をするのでしょうか? (1)fflush(stdin),fflush(stdout)とそれぞれ記述するとどのような動作をするのか。 (2)データをフラッシュしたいときとは、具体的にどんなときか。(scanfなどで続けてデータの入力を行うこと以外に) setbuf関数は、「出力バッファをユーザバッファに指定」とあるのですが、具体的にどういう意味なのでしょうか? (1)setbuf(stdout,buf)、setbuf(stdin,buf)とそれぞれ記述するとどのような動作をするのか。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 入力モードが「ひらがわ」に切り替わらない!
Okwaveで質問をしたり、回答をしたりするとき、入力モードが半角英数になってしまい、どうしても日本語で入力できないことがあります。2つのケースがあります。1つは、言語バーの入力モードが「半角英数」(A)になってしまって、どうしても「ひらがな」(あ)に切り替わらないとき、もう一つは言語バーのところは「ひらがな」(あ)のモードになっているのに、文字を打ち込むと、半角英数で出てきて、どうしても日本語が入力できないときです。これを書いているときは、たまたま、入力モードのご機嫌?がよく、日本語(漢字ひらがな)を入力することができています。この問題に対処するにはどうしたらよいでしょうか、同じ問題に出会って解決されたかたのアドバイスをいたただければ幸いと思います。
- ベストアンサー
- Windows Vista
- 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・C++・C#
- DVD-VRモードの音声ストリームについて
DVD-VRモードには音声ストリームが2本あるようなんですが、 DVD-VRで、テレビの音声多重放送(ステレオでも副音声付きでも)や 外部入力での音声が記録される場合って、その音声ストリームは 2本同時に使われているんでしょうか? それとも、DVD-Video規格での音声ストリームと同様に1本だけ?
- ベストアンサー
- その他(カメラ・ビデオカメラ)
- 突然、入力モードが変わるときについて
ワードを使って日本語の文章を作成しているとき、突然アルファベット表記に変わってしまい、言語バーを見ると「あ」と表記されていたところが「A」に変わってしまっており(しかもそれがなんだか四角形に囲まれたようなAになっているような気がします)、言語バーの入力モードを変えることもできず、また、キーボードの左上の「半角/全角」キーを押しても入力モードがひらがなに変わらず...ということがたまにあります。この状態についてお尋ねしたいことが二つあります。 1.当然私がどこかを間違って押してしまったからそうなるのだと思いますが、どこを押してしまったのでしょうか。 2.どうやったらすぐにもとの入力モードに戻せるでしょうか。今までは一度そこで文書を保存して、ワードを閉じ、また開けてみると日本語入力に戻っていた、というようにしていたのですが、時間がかかるので、すぐに日本語で入力できるようにしたいです。 教えていただけると助かります。どうぞよろしくお願いします。
- ベストアンサー
- Windows XP
- ファイルを開く、ストリームを結びつける、とは?
C言語の標準関数の説明の中に、 「ファイルを開く」 「ストリームと結びつける」 といった表現がでてくるのですが、これはどういう意味ですか? freopenを理解しようとしていたのですが・・・。 ファイルを開くとはFILE構造体を展開する?ファイルディスクリプタをシステムに登録する?・・・意味がいまいち掴めません。「ストリームと結びつける」も同様です。 これらは具体的にどういう意味なのでしょうか?回答よろしくお願いします。
- ベストアンサー
- C・C++・C#
お礼
>>最近とか、そういう問題ではありません。 正しくは動作が保障されているコンパイラもある、でしたね。 >>未定義の動作になります。 未定義なんですね。プログラムを組んだら変な動作になったので、別の方法で何とかすることにします。