洛上言 2023-05-29 12:53 采纳率: 95.4%
浏览 68
已结题

这里scanf的缓存区为什么会多一个1?

这里scanf的缓存区为什么会多一个1?

img


完整代码:
test.h:

#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
typedef struct guan
{
    char* id;
    char* name;
    int* sl;
    double* price;
}guan;
void lr(guan guan1[], int* num); //录入设备 
void ck(guan guan[], int* num);
void guanliyuan();

test.cpp:

#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS

#include"test.h"
/*struct guan
{
 char *id;
 char *name;
 int state;
 int sl;
 double price;
}sheb;*/
void jinru()
{
    printf("         欢迎使用设备借还系统        \n");
    printf("(1)管理员系统\n");
    printf("(2)用户登录系统\n");
    printf("(3)用户注册系统\n");
    printf("(4)退出\n");
    printf("请输入:");
}

int main()
{
    int a;
    struct guan guan[1000];
    jinru();
    scanf("%d", &a);
    switch (a)
    {
    case 1:
        guanliyuan();
        break;
    case 2:
        printf("用户登录系统\n");
        break;
    case 3:
        printf("用户注册系统\n");
        break;
    case 4:
        printf("退出\n");
        break;
    default:
        printf("error\n");
        break;
    }
}

test2.cpp:

#include"test.h"
void lr(guan guan1[], int* num)
{
    while (1)
    {
        printf("请输入设备编号:\n");
        scanf("%c\n", &guan1[*num].id);
        printf("请输入设备名称:\n");
        scanf("%c\n", &guan1[*num].name);
        printf("请输入设备数量:\n");
        scanf("%d\n", &guan1[*num].sl);
        printf("请输入设备价格:\n");
        scanf("%lf\n", &guan1[*num].price);
        (*num)++;
        char j;
        printf("是否继续录入(y/n):\n");
        //getchar();
        scanf(" %c", &j);
        if (j == 'y')
        {
            continue;
        }
        else
        {
            break;
        }
    }

}

void ck(guan guan[], int* num)
{
    while (1)
    {
        printf("设备名称是:%c\n", guan[(*num)].name);
        printf("设备数量是:%d\n", guan[*num].sl);
        printf("设备价格是:%lf\n", guan[*num].price);
        char c;
        printf("是否继续查看设备(y/n):\n");
        scanf(" %c\n", &c);
        if (c == 'y')
        {
            continue;
        }
        else
        {
            break;
        }
    }
}

void guanliyuan()
{
    int b;
    guan guan1[1000];
    printf("         管理员系统        \n");
    printf("(1)录入设备\n");
    printf("(2)查看已存设备\n");
    printf("(3)修改已有设备信息\n");
    printf("(4)登记破损设备\n");
    printf("(5)注销现存设备\n");
    printf("(6)返回\n");
    printf("请输入:\n");
    scanf("%d", &b);
    int num = 0;
    switch (b)
    {
    case 1:
        lr(guan1, &num);
        break;
    case 2:
        ck(guan1, &num);
        break;
    case 3:
    case 4:
    case 5:
    case 6:
    default:
        printf("error\n");
        break;
    }
}

  • 写回答

3条回答 默认 最新

  • 於黾 2023-05-29 15:30
    关注

    这不是多个1
    你得会看调试器
    这里49是'1'的ascii码,'1'是你输入的字符
    49'1'这是同一个值,不是2个值

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月6日
  • 已采纳回答 5月29日
  • 创建了问题 5月29日