C 函数返回的奇怪int
我面临一个奇怪的场景,当我的函数输出返回一个巨大的整数(4225528)时,我试图对一个变量中的简单值求和,并将该变量返回存储在一个结构中 发生了什么?我尝试了一个简单的指针函数,我在这里看到,没有工作,这是我的代码,有人知道如何解决这个问题吗 功能是“int地籍编辑(int Cad);” 可执行文件: 这是我打电话和函数的地方C 函数返回的奇怪int,c,C,我面临一个奇怪的场景,当我的函数输出返回一个巨大的整数(4225528)时,我试图对一个变量中的简单值求和,并将该变量返回存储在一个结构中 发生了什么?我尝试了一个简单的指针函数,我在这里看到,没有工作,这是我的代码,有人知道如何解决这个问题吗 功能是“int地籍编辑(int Cad);” 可执行文件: 这是我打电话和函数的地方 #include <stdio.h> int cadastroPedido(int Cad); int main(void) { printf("Voc
#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);
}
回报勇气;
}
调用函数时,您将看到cadastroPedidovalor
的局部变量未初始化。这意味着程序将在内存中选择一个位置。由于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;
}