首页 > 解决方案 > 从函数返回的奇怪的 int

问题描述

当我的函数的输出返回一个 ENORMOUS int (4225528) 时,我面临一个奇怪的情况,当我试图对一个 var 中的简单值求和并将该 var 存储在一个结构中时。

发生什么事了?我尝试了一个我在这里看到的简单指针函数,没有用,这是我的代码,有人知道如何解决这个问题吗?

函数是“int cadastrarPedido(int Cad);”

可执行文件:https ://repl.it/@thzmendes/UnwrittenHorizo​​ntalStructs

这是我打电话的地方和功能

#include <stdio.h>
int cadastroPedido(int Cad);
int main(void) {
  printf("Voce selecionou a opcao 4 - Cadastrar Pedido\n");
            int Cad;
            int vlr_T=0;
            printf("\nDigite numero do cadastro: ");
            scanf("%d",&Cad);

            vlr_T = cadastroPedido(Cad);
            printf("\n Valor total : %d",&vlr_T);
  return 0;
}

int cadastroPedido(int Cad){
    int Option;
    int OpcaoPedido;
    int valor=0;
    if(Cad>0)
    {
      do
      {
        printf("\nEscolha o seu pedido: ");
        printf("\n1- Pizza de Calabresa -50 reais");
        printf("\n2- Pizza de Frango - 40 reais");
        printf("\n2- Pizza de Mussarela - 30 reais");
        printf("\n2- Coca Cola- 10 reais");
        printf("\n2- Guarana- 10 reais");
        scanf("%d", &OpcaoPedido);
        if(OpcaoPedido == 1)
        {
            printf("\nPressione 1 para continuar pedindo ou 2 para volar ao menu principal: ");
            valor +=50;
            scanf("%d", &Option);
        }
        else
          if(OpcaoPedido == 2)
          {
            printf("\nPressione 1 para continuar pedindo ou 2 para volar ao menu principal: ");
            scanf("%d", &Option);
            valor +=40;
          }
        else
          if(OpcaoPedido == 3)
          {
            printf("\nPressione 1 para continuar pedindo ou 2 para volar ao menu principal: ");
            scanf("%d", &Option);
            valor +=30;
          }
        else
          if(OpcaoPedido == 4)
          {
            printf("\nPressione 1 para continuar pedindo ou 2 para volar ao menu principal: ");
            scanf("%d", &Option);
            valor +=10;
          }
          else
          if(OpcaoPedido == 5)
          {
            printf("\nPressione 1 para continuar pedindo ou 2 para volar ao menu principal: ");
            scanf("%d", &Option);
            valor +=10;
          }
      }while(Option == 1);
    }
    return valor;
}

标签: c

解决方案


我已经打了你的代码一点点。此代码片段足以重现您的“错误”。

#include <stdio.h>
int cadastroPedido(int Cad);
int main(void) {
  int valor = cadastroPedido(1);
  printf("%d",valor);
  return 0;
}

int cadastroPedido(int Cad){ 
    int Option;
    int OpcaoPedido;
    int valor;
    if(1==Cad)
    {
      do
      {
        printf("\nEscolha o seu pedido: ");
        printf("\n1- Pizza de Calabresa -50 reais");
        printf("\n2- Pizza de Frango - 40 reais");
        scanf("%d", &OpcaoPedido);
        if(OpcaoPedido == 1)
        {
            printf("\nPressione 1 para continuar pedindo ou 2 para volar ao menu principal: ");
            valor +=50;
            scanf("%d", &Option);
        }
        else 
          if(OpcaoPedido == 2)
          {
            printf("\nPressione 1 para continuar pedindo ou 2 para volar ao menu principal: ");
            scanf("%d", &Option);
            valor +=40;
          }
      }while(Option == 1);
    }
    return valor;
}

您将看到 cadastroPedido 的局部变量在valor调用该函数时未初始化。这意味着程序将在内存中选择一个位置。由于 RAM 的恶作剧,内存中的该位置可能已经有一个随机值。

您可以通过将其显式声明为 like 来避免这种情况int value = 0,因此您将始终知道该变量的起始值,这样您就不会受制于预先存在的内存状态。

如果您在 C 中声明变量时没有初始化变量,那么您就有陷入这些不一致的风险,特别是在+=操作期间。


推荐阅读