2017-11-18 12 views
-2

私のCプログラムは何らかの理由で「文字を入力(D/E/F)」の直後に閉じます:私のCプログラムでscanf_s()を正しく動作させるにはどうすればよいですか?

私は印刷できるように文字[]配列に3文字を格納したいと思います彼らは後で。

Visual Studio 2017を使用していて、プログラムにエラーはありません。 printf("Enter a letter (D/E/F): ");の後はすべてをスキップするようです。

問題はscanf_sと関係がありますが、問題の内容や修正方法を正確には分かりません。ここに私のプログラムがあります:

#include <stdio.h> 

int main(void) 
{ 
    char letters[3]; 
    char ch; 
    printf("Enter a letter (A/B/C): "); 
    scanf_s(" %c", &ch); 
    letters[0] = ch; 
    printf("Enter a letter (D/E/F): "); 
    scanf_s(" %c", &ch); 
    letters[1] = ch; 
    printf("Enter a letter (G/H/I): "); 
    scanf_s(" %c", &ch); 
    letters[2] = ch; 

    printf("You entered %c, %c, and %c.", letters[0], letters[1], letters[2]); 

    getchar(); getchar(); // PAUSE 
    return 0; 
} 

助けてください。

+1

引数がありません。詳細については、「scanf_s」のマニュアルページを参照してください。それは 'scanf'ではないので、仮定はしないでください。 –

+1

あなたは[scanf_s'関数](https://msdn.microsoft.com/en-us/library/w40768et.aspx)を間違って使用しています。 –

+0

この質問に投稿されたソリューションを確認してください: https://stackoverflow.com/questions/21434735/difference-between-scanf-and-scanf-s –

答えて

0

scanf_s(" %c", &ch);scanf_s(" %c", &ch, 1);に変更され、プログラムが機能します。

ありがとうWeatherベーン、いくつかのプログラマー、Kal Karaman、天気ヴェーン再び、このウェブページ:http://faculty.edcc.edu/paul.bladek/CS131/scanf_s.htm

+0

より良いコードでは、戻り値もチェックします: 'if(1 == scanf_s(...))Success();' – chux

関連する問題