c - 从函数返回的奇怪的 int
问题描述
当我的函数的输出返回一个 ENORMOUS int (4225528) 时,我面临一个奇怪的情况,当我试图对一个 var 中的简单值求和并将该 var 存储在一个结构中时。
发生什么事了?我尝试了一个我在这里看到的简单指针函数,没有用,这是我的代码,有人知道如何解决这个问题吗?
函数是“int cadastrarPedido(int Cad);”
可执行文件:https ://repl.it/@thzmendes/UnwrittenHorizontalStructs
这是我打电话的地方和功能
#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;
}
解决方案
我已经打了你的代码一点点。此代码片段足以重现您的“错误”。
#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 中声明变量时没有初始化变量,那么您就有陷入这些不一致的风险,特别是在+=
操作期间。
推荐阅读
- c# - this.Refresh() 阻止新图
- javascript - 反应动态组件不渲染
- oracle - ORA-01489 - 字符串连接的结果太长 - 附加大 Varchar 列
- react-native - 为初学者学习 react-native?
- css - CSS网格显示一排4列或2行2列
- javascript - 如何以闪亮的方式以编程方式转到 HTML 锚点?
- excel - 浏览多个工作表时,注释语句不起作用
- azure-devops - 发布多个项目 - AzureDevOps
- azure - Azure Devops - 启用对 keyvault 的访问
- r - R中的选择性替换字符串