You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现点餐系统循环中ID自增?当前ID显示固定异常值

点餐系统ID自增问题修复

核心问题分析

  1. 变量未初始化:c声明时未赋值,直接执行c = c + 1会读取内存随机值,逻辑完全混乱。
  2. 错误打印内存地址:输出ID时用了&c,这是取变量c的内存地址,而非变量本身的值,所以每次显示的都是固定的地址数值(比如你看到的6684076)。
  3. 冗余结构体定义:每次循环定义R1、R2、R3、R4四个结构体,其实一个结构体就能存全订单信息,没必要拆分。
  4. 不安全输入函数:gets已被C标准废弃,存在缓冲区溢出风险,建议替换为fgets。
  5. 未定义行为的fflush(stdin):fflush仅对输出流有效,刷新输入流属于未定义行为,不同编译器处理结果不一致。

修正后的代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct res {
    char nome[40];
    char endereco[100];
    char pedido[200];
    char valor[20];
};

int main() {
    int cod = 0;
    // 初始化订单ID计数器
    int pedido_id = 0;

    while (cod < 100) {
        cod++;
        pedido_id++;
        struct res pedido_atual;

        printf("Digite seu nome: ");
        // 用fgets替代gets,同时去除输入末尾的换行符
        fgets(pedido_atual.nome, sizeof(pedido_atual.nome), stdin);
        pedido_atual.nome[strcspn(pedido_atual.nome, "\n")] = '\0';

        printf("Digite seu endereco: ");
        fgets(pedido_atual.endereco, sizeof(pedido_atual.endereco), stdin);
        pedido_atual.endereco[strcspn(pedido_atual.endereco, "\n")] = '\0';

        printf("Digite seu pedido: ");
        fgets(pedido_atual.pedido, sizeof(pedido_atual.pedido), stdin);
        pedido_atual.pedido[strcspn(pedido_atual.pedido, "\n")] = '\0';

        printf("Digite o valor total que vai pagar: ");
        fgets(pedido_atual.valor, sizeof(pedido_atual.valor), stdin);
        pedido_atual.valor[strcspn(pedido_atual.valor, "\n")] = '\0';

        system("cls");
        // 直接打印计数器变量值,而非地址
        printf("Codigo: %d\n", pedido_id);
        printf("Nome: %s\n", pedido_atual.nome);
        printf("Endereco: %s\n", pedido_atual.endereco);
        printf("Pedido: %s\n", pedido_atual.pedido);
        printf("Valor: %s\n", pedido_atual.valor);
    }

    return 0;
}

关键修改点

  • 新增初始化的pedido_id作为订单ID计数器,每次循环自增1。
  • 打印ID时直接使用变量名,移除取地址符&。
  • 用fgets替代gets,并通过strcspn处理输入末尾的换行符。
  • 改用单个结构体存储订单信息,简化代码逻辑。
  • 删除了未定义行为的fflush(stdin)。

内容的提问来源于stack exchange,提问作者Scuttler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 08:36:22