C语言scanf C语言scanf

为什么会这样?我输入1时直接运行然后报错……好像第二个scanf一点用没有

img

在第一个 scanf_s下面 加一个 getchar();吃掉缓冲区的 换行符’\n’,换行符 也算一个字符的,所以下面不是没输入,而是输入了换行符到 grade 里面

scanf_s()函数需要一个返回值,你输入时需要给他一个返回值。在第一行添加,#define _CRT_SECURE_NO_WARNINGS 1直接用scanf函数就可以了,其他的c语言函数也直接就可以用了。不用加_s了

修改如下,供参考:

#include <stdio.h>
int main()
{
    int a;
    printf("请输入1或2(等级转分数为1,分数转等级为2)\n");
    scanf_s("%d", &a);
    char grade;
    if (a == 1) {

        printf("请输入等级:\n");
        scanf_s(" %c", &grade, sizeof(grade)); //修改

        switch (grade)
        {
        case 'A':
            printf("对应分数为90-100");
            break;
        case 'B':
            printf("对应分数为80-89");
            break;
        case 'C':
            printf("对应分数为70-79");
            break;
        case 'D':
            printf("对应分数为60-69");
            break;
        case 'E':
            printf("对应分数为60分以下");
        default:
            printf("enter date error");
        }
    }
    else
    {
        int a, b;  
        printf("请输入你的分数:\n");
        scanf_s("%d", &a);
        b = a / 10;
        switch (b)
        {
        case 10:
        case 9:printf("A\n");
            break;
        case 8:printf("B\n");
            break;
        case 7:printf("C\n");
            break;
        case 6:printf("D\n");
            break;
        case 5:
        case 4:
        case 3:
        case 2:
        case 1:
        case 0:printf("E\n");
            break;
        default:printf("enter date error");
        }
    }
}

scanf_s 改成scanf试试