C 函数返回的奇怪int

C 函数返回的奇怪int,c,C,我面临一个奇怪的场景,当我的函数输出返回一个巨大的整数(4225528)时,我试图对一个变量中的简单值求和,并将该变量返回存储在一个结构中 发生了什么?我尝试了一个简单的指针函数,我在这里看到,没有工作,这是我的代码,有人知道如何解决这个问题吗 功能是“int地籍编辑(int Cad);” 可执行文件: 这是我打电话和函数的地方 #include <stdio.h> int cadastroPedido(int Cad); int main(void) { printf("Voc

我面临一个奇怪的场景,当我的函数输出返回一个巨大的整数(4225528)时,我试图对一个变量中的简单值求和,并将该变量返回存储在一个结构中

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

功能是“int地籍编辑(int Cad);”

可执行文件:

这是我打电话和函数的地方

#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;
}
#包括
int CADASTROPEDO(int Cad);
内部主(空){
printf(“Voce selecionou a opcao 4-地籍测量数据”);
int Cad;
int vlr_T=0;
printf(“\n地籍编号:”);
扫描频率(“%d”和Cad);
vlr_T=地籍(Cad);
printf(“\n总价值:%d”,&vlr\T);
返回0;
}
int CADASTROPEDO(int Cad){
int选项;
国际组织;
int-valor=0;
如果(Cad>0)
{
做
{
printf(“\nEscolha o seu pedido:”);
printf(“\n1-卡拉布雷萨比萨饼-50雷亚尔”);
printf(“\n2-弗兰戈披萨-40雷亚尔”);
printf(“\n2-穆萨雷拉比萨饼-30雷亚尔”);
printf(“\n2-可口可乐-10雷亚尔”);
printf(“\n2-瓜拉那-10雷亚尔”);
scanf(“%d”和OpcaoPedido);
如果(opo=1)
{
printf(“\n第1段连续菜单和第2段volar ao菜单主体:”);
英勇+=50;
scanf(“%d”,选项(&O);
}
其他的
如果(opo=2)
{
printf(“\n第1段连续菜单和第2段volar ao菜单主体:”);
scanf(“%d”,选项(&O);
英勇+=40;
}
其他的
如果(opo=3)
{
printf(“\n第1段连续菜单和第2段volar ao菜单主体:”);
scanf(“%d”,选项(&O);
英勇+=30;
}
其他的
如果(opo=4)
{
printf(“\n第1段连续菜单和第2段volar ao菜单主体:”);
scanf(“%d”,选项(&O);
英勇+=10;
}
其他的
如果(opo=5)
{
printf(“\n第1段连续菜单和第2段volar ao菜单主体:”);
scanf(“%d”,选项(&O);
英勇+=10;
}
}而(选项==1);
}
回报勇气;
}

我对你的代码做了一点修改。这个代码片段足以重现您的“bug”

#包括
int CADASTROPEDO(int Cad);
内部主(空){
int valor=cadastroPedido(1);
printf(“%d”,valor);
返回0;
}
int cadastroPedido(int Cad){
int选项;
国际组织;
英勇;
如果(1==Cad)
{
做
{
printf(“\nEscolha o seu pedido:”);
printf(“\n1-卡拉布雷萨比萨饼-50雷亚尔”);
printf(“\n2-弗兰戈披萨-40雷亚尔”);
scanf(“%d”和OpcaoPedido);
如果(opo=1)
{
printf(“\n第1段连续菜单和第2段volar ao菜单主体:”);
英勇+=50;
scanf(“%d”,选项(&O);
}
其他的
如果(opo=2)
{
printf(“\n第1段连续菜单和第2段volar ao菜单主体:”);
scanf(“%d”,选项(&O);
英勇+=40;
}
}而(选项==1);
}
回报勇气;
}
调用函数时,您将看到cadastroPedido
valor
的局部变量未初始化。这意味着程序将在内存中选择一个位置。由于RAM欺骗,内存中的那个位置可能已经有了一个随机值

您可以通过显式声明它(如
int value=0
)来避免这种情况,这样您就可以始终知道该变量的起始值,并且不会受先前存在的内存状态的支配


如果在C中声明变量时不初始化变量,就有可能陷入这些不一致,特别是在
+=
操作期间

功能是“int地籍编辑(int Cad);在你发布的大量代码中,除了一个名为“地籍编辑”的函数外,似乎什么都有“。请尝试创建一个演示,重点放在最小部分。我想你所展示的大部分代码并不真的需要复制你的问题?另外,请刷新。请不要递归调用
main
。虽然它在C中不是被禁止的(与C++不同),但它确实是一种不好的行为。只需从函数返回并使用循环。在快速检查之后,您似乎超出了数组的范围。例如,在
verifica\u pos
中,您将使用
200
作为
log
数组的索引,而最大有效索引为
199
。这种索引(导致未定义的行为)可能是您问题的根源。我的错误,刚刚解决了这个问题我刚刚测试了您的代码,它确实有效,但当我尝试这样使用它时,它不起作用:@ThomasMendes确实有效,但是当您执行
printf(\n Valor total:%d“,&vlr\T)时
您正在以int格式打印
vlr\u T
的内存位置。要打印存储在
vlr\u T
中的int值,请执行
printf(“\n值总计:%d”,vlr\u T)
,而不使用
说明符。
#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;
}