2016-12-24 7 views
-5

何らかの理由で、私はchar型にscanf_sから書き込むことができません。私はVisual Studio 2013で使用しています。 "%c"と "%c" scanf_s。迷っています。受信アドレスとサイズ、1です:文字タイプが入力されていない

// Alphabetic Pyramid Program - The Egyptians must have used C! 
#include <stdio.h> 

int main(void) 
{ 
    char ch; 

    printf("Enter the letter that will be the foundations of your Aphabetic Pyramid:\n"); // User is promted to enter a letter 
    scanf_s(" %c", &ch); // User inputs Foundational_letter 
    printf("The code for %c is %d!\n", ch, ch); 

    getchar(); 
    getchar(); 

    return 0; 
} 
+1

ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –

+2

覚えておいてください:CとC++は同じ言語ではありません。タグ1のみ。 'scanf_s("%c "、&ch、1);' –

+0

"scan_fからch char型に書き込めません。より具体的にしてください。エラーはありますか?間違った動作がある場合は、入力、予想結果、実際の結果を入力してください。 – kaylum

答えて

4

scanf_sが%c指定用の2つの引数を期待し設計することにより

scanf_s(" %c", &ch, 1); 

を、scanf関数のすべての安全なバージョン(_sで終わるもの)は、いくつかを必要とします文字列型(%s)とchar型(%c)のときに入力を受け取るために予約したバッファ領域の量を指定するパラメータ。つまり、%sの場合、バッファアドレスとその予約サイズを指定します。

これらのルールを適用しない場合は、未定義の動作が予想されます。

+0

["ヌルではない終了文字列の複数の文字が読み込まれると、整数が幅指定とバッファサイズとして使用されます。"](https://msdn.microsoft.com/en-us/library/w40768et.aspx#アンカー_2) – Stargateur

関連する問題