首页 > 解决方案 > 为什么 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");
    }

    

}

标签: cvisual-studioscanf

解决方案


使用该scanf_s函数时,%c和格式说明符需要为其每个相应的数据%s参数附加一个大小参数,即该参数指向的缓冲区的大小。这个大小参数(无符号类型)应该紧跟相应的数据参数。

在您的情况下(使用格式读取的单个字符%c),该缓冲区的大小将为1,因此请使用以下输入行:

scanf_s("%d%c%d", &num1, &op, 1u, &num2);
//                            ^ size of the "op" variable (in bytes)

推荐阅读