c - 为什么 scanf_s 在 Visual Studio 中无法正常工作?
问题描述
scanf_s
我的代码中的调用有什么问题?(我无法输入值num2
,并且命令在到达结尾之前就结束了。)
当我尝试这样做时,我没有这个问题:
scanf_s("%c", &op);
scanf_s("%d%d", &num1,&num2);
原代码:
#include<stdio.h>
void main()
{
int num1, num2, res, opok=1;
char op;
printf("please insert your experession:\n");
scanf_s("%d%c%d", &num1, &op, &num2);
switch (op)
{
case '+':
res = num1 + num2;
break;
case '-':
res = num1 - num2;
break;
case '*':
res = num1 * num2;
break;
default:
opok = 0;
break;
}
if (opok == 1)
{
printf_s("%d\n", res);
}
else
{
printf_s("error\n");
}
}
解决方案
使用该scanf_s
函数时,%c
和格式说明符需要为其每个相应的数据%s
参数附加一个大小参数,即该参数指向的缓冲区的大小。这个大小参数(无符号类型)应该紧跟相应的数据参数。
在您的情况下(使用格式读取的单个字符%c
),该缓冲区的大小将为1
,因此请使用以下输入行:
scanf_s("%d%c%d", &num1, &op, 1u, &num2);
// ^ size of the "op" variable (in bytes)