• 締切済み

標準入力の違い

今C言語の学習を行っています。 そこで、文字入力の学習を行っていますが、 getchar() getche() で改行(¥n)の取得値が異なります。 getchar() => 0x10 getche() => 0x13 改行復帰という言葉があるのはわかるのですが、 なぜ、getchar()のほうは、0x10で見えるのでしょうか?

みんなの回答

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

getcheは標準関数ではないので、処理系による違いがあるかも知れませんが... getcharは標準入力からの1文字入力ですので、改行文字は内部的に'\n'に変換されます。 それに対して、getcheはコンソールからの(エコーバック付きでの)1文字入力なので、キーボードでEnterが押された場合、それに対応するCR(=0x0d)が入力されます。 標準関数と、処理系の独自関数とは、はっきり区別しながら学習しないと、余計な混乱を招くことになります。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ある特定も文字'#'が入力されるまで実行

    C言語である特定の文字#が入力されるまで 入力し、#が入力されたら、合計を出力するプログラム はどのようだと思われますか? #はgetchar()でとるのが最善でしょうか?

  • 入力・出力について

    今C言語を勉強しているのですが、 次の問題が解けなくて困っています。 (1)「neko」と入力すると、「n e k o」と文字と文字の間にスペースを挟み出力するプログラムを書け。 (2)「neko」と入力すると、 「n e k o」 と一文字づつ改行し出力するプログラムを書け。 以上2点です。 printfやscanfを使って色々考えてみたのですが、 代入ではなく入力という問題のため、 解答の糸口すら掴めません。 よろしくお願いします。

  • C言語

    課題なんですが、C言語で 「文字列と正数nをキーボードから入力して、1行n文字で改行するプログラム」 をつくりたいのですが、わかりません。どうすればよいのですか?

  • Cのgetcharについて

    Cの文字取得についての質問です。 #include <stdio.h> main() { int a,b,c,d; b=0; printf("1~10の間で数字を入力してください。\n"); scanf("%d",&a); printf("%dで処理します。\nよろしいですか?\nはい:y いいえ:n\n",a); c=getchar(); この場合getcharで文字を取得することができません。 というかenterを押して次に進んだようになってしまいます。ですがc=getchar();を2回繰り返すと文字を取得できます。 1回だと文字取得できなくて2回繰り返すと文字を取得できる理由が知りたいです。 scanfを最初に行っている事が絡んでると思うのですが 具体的な理由を教えてください。

  • C言語で、文字とか入力されなくても実行を続けたい

    現在簡単なゲームをunix系のOSのC言語でつくってますが なにも入力されなくても停止せず実行を続けられる getcharのような関数はないのでしょうか? windows系のOSにはcons.hヘッダーあたりに そんな関数あったような気がするのですが。。。 普通のgetcharだと、文字が入力されるまで(enter押されるまで) そこで実行が一時中断されてしまい リアルタイムで動くプログラムができないのですが。。。

  • 素朴な質問です。¥nと\nの違い!

    最近、C言語の勉強を初めてばかりですが、 本を見ながらソースをテキストで打っていますが、改行(¥n)で表現されているので その通りの入力するとコンパイル時に改行されず¥nのまま表示されます。 いろいろ調べた結果(\n)に変換すると改行してくれました。 ¥nと書かれているものと\nで書かれているものがあるようですが、どのように理解すれば よいのでしょう?キーの位置は同じですが、option+¥で\nになります。(Macです) コンパイラによって違うのでしょうか? どなたか教えてください?

  • コンソールアプリの入力時に改行させたくない

    プログラミング初心者です。 Visal Studio 2010を使用してC++の勉強をしています。 コンソールアプリケーションにてstd::cinを使ってstring型かchar型変数への入力を受けさせます。 cinによる入力待ちの状態になったとき、何も入力しないでエンターキーを押すと、コンソールの画面上でカーソルが次の行へ移動し、まだ入力を待ち受けてくれます。 これを、「何も入力されてない状態でエンターキーが押されたら、変数へ何も代入しない or ヌルなどを代入して、終わり」という動作にすることはできないでしょうか? 例えるなら、getcharです。getcharならエンターを押すと改行コードを受け取ってそのまま終わってくれます。しかし、入力には複数の文字列を想定しているため、getcharは使いたくありません。 cin以外の入力でも構いませんので、何か良いアイディアがありましたらご教示ください。 以上になります。説明が下手で申し訳ありません。お読みいただきありがとうございました。 よろしくお願いいたします。

  • 置き換えのプログラム

    c言語初心者です。 入力されたタブを\tに置き換えて、入力全体を出力するプログラムを、 #include <stdio.h> main() { int c; while((c=getchar())!=EOF){ if(c=='\t') printf("\\t");   putchar(c); } } と書いて実行できたのですが、入力した文字(タブ、空白、改行などは除く)を¥(バックスシュラッシュ)に置き換えて出力するプログラムにするためには、どのように書き換えればよいのでしょうか? どなたかご教授お願いします。

  • 改行を含まない文字数を取得するには?

    エディットボックスに入力された文字数をGetWindowTextLength関数で取得した時 < 例 >  aaaaああああいいいい と入力した場合 結果は12 aaaa ああああ いいいい    と入力した場合 結果は16 というように同じ文字数なのに改行を含むと改行1につき2文字分多くカウントされてしまいます。 複数行入力されていても改行文字を含まない文字数を取得するにはどうすればいいですか? --- 実行環境 --- Visual Studio 2010 Express WIN32 ユニコードビルド C言語

  • 標準ライブラリ関数で入力する時にEORが未定義と表示される

    #include <stdio.h> int main(void) { int i, c, counter[10] = {0}, n; printf("数字を入力してください。(終了条件:Ctrl+Z)\n"); while ((c = getchar()) != EOF) { n = c - '0'; if (n >= 0 && n <= 9) { counter[n]++; } } printf("\n入力した数字の個数\n"); for (i = 0; i < 10; i++) { printf("%d : %d個入力\t", i, counter[i]); } return 0; } 上のように入力した場合になぜかEORは未定義と表示されます・ これはどうしてなのでしょうか? この式でいけるはずなのですが。 よろしくお願いします。

このQ&Aのポイント
  • 美肌の男性は女性にとって魅力的です。健康な肌は若々しさや美しさを引き立てるため、女性は美肌の男性に惹かれることがあります。
  • 美肌男子に対する女性の好意は、外見的な魅力だけでなく、清潔感や健康意識の高さにも関連しています。美肌の男性は自身の健康に気を使っているイメージを与えるため、女性からの印象も良くなることがあります。
  • また、美肌男子はスキンケアに積極的に取り組んでいることが多く、自分自身の身だしなみにも気を使っていることが多いです。これにより、女性からは細かい気遣いのできる人として評価されることがあります。
回答を見る