如何使scanf_s()在我的C程序中正常工作?

如何使scanf_s()在我的C程序中正常工作?,c,C,由于某种原因,我的C程序在输出“输入字母(D/E/F)”后立即关闭 我希望能够在字母[]数组中存储3个字符,以便以后打印它们 我使用Visual Studio 2017,程序没有错误。它似乎跳过了printf(“输入一个字母(D/E/F):”)之后的所有内容 我认为问题与scanf_有关,但我不知道问题是什么,也不知道如何解决。以下是我的节目: #include <stdio.h> int main(void) { char letters[3]; char ch;

由于某种原因,我的C程序在输出“输入字母(D/E/F)”后立即关闭

我希望能够在字母[]数组中存储3个字符,以便以后打印它们

我使用Visual Studio 2017,程序没有错误。它似乎跳过了
printf(“输入一个字母(D/E/F):”)之后的所有内容

我认为问题与scanf_有关,但我不知道问题是什么,也不知道如何解决。以下是我的节目:

#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;
}
#包括
内部主(空)
{
字符[3];
char ch;
printf(“输入字母(a/B/C):”;
scanf_s(“%c”和“ch”);
字母[0]=ch;
printf(“输入字母(D/E/F):”;
scanf_s(“%c”和“ch”);
字母[1]=ch;
printf(“输入字母(G/H/I):”;
scanf_s(“%c”和“ch”);
字母[2]=ch;
printf(“您输入了%c、%c和%c.”,字母[0]、字母[1]、字母[2]);
getchar();getchar();//暂停
返回0;
}
请帮助。

已更改
scanf\u s(“%c”和&ch)
扫描(“%c”和ch,1)程序现在可以运行了


再次感谢Weather Vane,一些程序员,Kal Karaman,Weather Vane,还有这个网页:

您缺少一个参数,请详细阅读
scanf\u s
的手册页。它不是
scanf
,所以不要做任何假设。你使用的是错误的。请查看发布在这个问题上的解决方案:与
scanf
wscanf
不同,
scanf_s
wscanf_s
要求为包含在[]中的c、c、s、s或字符串控制集的所有输入参数指定缓冲区大小。缓冲区大小(以字符为单位)作为指向缓冲区或变量的指针后的附加参数传递。更好的代码还可以检查返回值:
if(1==scanf_s(…))Success()