none
getcharの使い方 RRS feed

  • 質問

  • OS:WINDOWS 8

    64ビットOS

    VISUAL STUDIO 2012において、VISUAL C++を起動して、→「Win32コンソールアプリケーション」で、以下のようなコーディングをしました。

    ------------------------------------------------------------------------------------------------

    // ConsoleApplication2.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
    //

    #include "stdafx.h"


    int main(void)
    {
     int a=0;

     int b;

     printf("Input a\n");

     scanf_s("%d", &a);  // scanf("%d", &a)だとエラーになる。

     printf("%d\n",a);

     b=getchar();

     putchar(b);

     return 0;


    }

    ------------------------------------------------------------------------------------------------

    #include "stdafx.h"の中身は以下の通り

    // stdafx.h : 標準のシステム インクルード ファイルのインクルード ファイル、または
    // 参照回数が多く、かつあまり変更されない、プロジェクト専用のインクルード ファイル
    // を記述します。
    //

    #pragma once

    #include "targetver.h"

    #include <stdio.h>
    #include <tchar.h>

     

    // TODO: プログラムに必要な追加ヘッダーをここで参照してください。

    ------------------------------------------------------------------------------------------------

     b=getchar();の所で入力できずに、終わってしまいます。

    int main(void)
    {
     int b;

     b=getchar();

     putchar(b);

     return 0;

    }

    これだと、ちゃんと入力できます。

    どこがおかしいのか、教えてください。

    よろしくお願いします。

    2013年10月27日 11:58

回答

  • return 0; の前に printf("%d\n",b); としてみれば、わかると思います。
    • 回答の候補に設定 星 睦美 2013年10月29日 2:06
    • 回答としてマーク 星 睦美 2013年10月31日 0:48
    2013年10月27日 12:54
  • 10 で何かわからないかもしれないので、補足まで。
    10 = 0x0a は改行コードです。scanf_s の段階で 13 と Enter を押していると思いますが、その Enter の分が残っていると言うことです。

    解決方法はたぶん「scanf getchar enter」といったキーワードで検索すれば得られると思います。

    • 回答の候補に設定 星 睦美 2013年10月29日 2:06
    • 回答としてマーク 星 睦美 2013年10月31日 0:48
    2013年10月27日 22:08
    モデレータ

すべての返信

  • return 0; の前に printf("%d\n",b); としてみれば、わかると思います。
    • 回答の候補に設定 星 睦美 2013年10月29日 2:06
    • 回答としてマーク 星 睦美 2013年10月31日 0:48
    2013年10月27日 12:54
  • scanf_s("%d", &a);  で13を入力し、return 0; の前に printf("%d\n",b); としたら、10が出てきました。

    ますます、わからなくなりました。

    2013年10月27日 13:04
  • scanf_s に対して何かキー入力したときに、10 に相当するものも入力しているということでしょう。
    2013年10月27日 16:50
  • 10 で何かわからないかもしれないので、補足まで。
    10 = 0x0a は改行コードです。scanf_s の段階で 13 と Enter を押していると思いますが、その Enter の分が残っていると言うことです。

    解決方法はたぶん「scanf getchar enter」といったキーワードで検索すれば得られると思います。

    • 回答の候補に設定 星 睦美 2013年10月29日 2:06
    • 回答としてマーク 星 睦美 2013年10月31日 0:48
    2013年10月27日 22:08
    モデレータ
  • ミミちゃんパパ さん、こんにちは
    フォーラム オペレーターの星 睦美です。

    HomeCloset さんとAzulean さんからのアドバイスを参考にしていただけるのではないかと思います。今回は私からスレッドに[回答としてマーク] させていただきましたが、もし質問を続ける場合には遠慮なく[回答としてのマークの解除] をして返信できます。

    それでは、これからもMSDN フォーラムをお役立てくさい。


    フォーラム オペレーター 星 睦美 - MSDN Community Support

    2013年10月31日 0:53