如何使用scanf_s读取多个字符?

如何使用scanf_s读取多个字符?,c,character,C,Character,我应该写一个程序,输入两个字符,中间有一个空格。出于某种原因,我无法使用单个扫描,因为它会引发异常 是我做错了什么还是根本不可能 #include <stdio.h> int main() { char character1, character2; printf("type in 2 small letters with a space inbetween: "); scanf_s("%c %c", &charact

我应该写一个程序,输入两个字符,中间有一个空格。出于某种原因,我无法使用单个扫描,因为它会引发异常

是我做错了什么还是根本不可能

#include <stdio.h>

int main() 
{
  char character1, character2;

  printf("type in 2 small letters with a space inbetween: ");
  scanf_s("%c %c", &character1, &character2);

  //this part prints big letter version of the one i typed in and its integer value
  printf("%c %d\n", character1 - 32, character1 - 32); 
  printf("%c %d\n", characer2 - 32, character2 - 32);

  return 0;
}
#包括
int main()
{
字符1,字符2;
printf(“键入两个小字母,中间有空格:”);
扫描(“%c%c”、&character1和&character2);
//这一部分打印我输入的一个大字母版本及其整数值
printf(“%c%d\n”,字符1-32,字符1-32);
printf(“%c%d\n”,字符2-32,字符2-32);
返回0;
}

因为我使用的是scanf_s而不是常规scanf,所以我需要指定如下缓冲区大小:

scanf_s("%c %c", &character1, 1, &character2, 1);
另一个选项是使用scanf,但我必须抑制警告:

#define _CRT_SECURE_NO_WARNINGS 1
#define _WINSOCK_DEPRECATED_NO_WARNINGS

您从scanf_s得到什么样的异常?@AlexanderUshakov-在Uloha1.exe中的0x0FD398F1(ucrtbased.dll)抛出异常:0xC0000005:访问冲突写入位置0x00AA1343。根据标准()和注4:“fscanf_s函数与fscanf等效,除了c、s和[转换说明符适用于一对参数…”@user3121023
scanf_s(%c%c),&character1,(rsize_t)1,&character2,(rsize_t)1);
如果要使用
scanf_s(),则需要先将预处理器常量
设置为1,然后再包含
函数。但我不认为这是您的问题的原因。
1
是一个
int
scanf\u s()
需要一个
rsize\u t
。这会导致UB。在您的平台上,它可能会工作,因为它们都使用一个寄存器,或者都具有相同的大小,但它是UB。将它转换为
rsize\u t