C:警告:“withdrawal_amt”可能在此函数中未初始化使用
Posted
技术标签:
【中文标题】C:警告:“withdrawal_amt”可能在此函数中未初始化使用【英文标题】:C: warning: ‘withdrawal_amt’ may be used uninitialized in this function 【发布时间】:2013-12-29 20:01:18 【问题描述】:我正在为我的 C 类介绍编写一个程序,当我尝试使用 gcc 进行编译时不断收到一些警告。
这是我的代码:
int main ()
float balance;
float beg_balance;
float withdrawal_amt;
float deposit_amt;
float amount;
int total_withdrawals;
int total_deposits;
int selection;
print_greeting ();
printf("Let's begin with your beginning balance");
beg_balance = get_positive_value();
do
print_menu ();
scanf("%d", &selection);
switch (selection)
case WITHDRAWAL:
get_positive_value();
balance = withdrawal(balance, withdrawal_amt, amount);
break;
case DEPOSIT:
get_positive_value();
balance = deposit(balance, deposit_amt, amount);
break;
case SUMMARY:
print_receipt(total_withdrawals, total_deposits, beg_balance, balance, \
withdrawal_amt, deposit_amt);
break;
case QUIT:
break;
default: printf("Invalid selection");
break;
while(selection != 4);
return 0;
我在编译时遇到的错误是这样的:
project.c: In function ‘main’:
project.c:46: warning: ‘withdrawal_amt’ may be used uninitialized in this function
project.c:46: warning: ‘amount’ may be used uninitialized in this function
project.c:50: warning: ‘deposit_amt’ may be used uninitialized in this function
project.c:53: warning: ‘total_withdrawals’ may be used uninitialized in this function
project.c:53: warning: ‘total_deposits’ may be used uninitialized in this function
任何想法为什么?谢谢
编辑:
现在我无法创建用于打印帐户交易历史记录的注册功能。它应该打印出期初余额和期末余额,以及显示已发生的所有交易(存款和取款)的表格。任何帮助将不胜感激
【问题讨论】:
非常感谢!!效果很好。现在我无法创建用于打印帐户交易历史的注册功能。它应该打印出期初余额和期末余额,以及显示已发生的所有交易(存款和取款)的表格。任何帮助将不胜感激 C: assigning to local variable in subroutine fixes program, why?的可能重复 【参考方案1】:float balance;
float beg_balance;
float withdrawal_amt;
float deposit_amt;
你永远不会赋予它们任何价值。就像你写的一样:
case DEPOSIT:
get_positive_value();
balance = deposit(balance, (float), amount);
break;
你需要像这样初始化它们:
float withdrawal_amt = 0.0;
【讨论】:
【参考方案2】:你得到的错误不是错误而是警告。他们指出您没有初始化任何自动存储变量,因此它们将以 未指定 值启动。
你可以初始化你的变量,比如0
,警告就会消失。
【讨论】:
【参考方案3】:我想你想像这样使用你的函数get_positive_value()
:
withdrawal_amt = get_positive_value();
和其他类似的。
您正在传递withdrawal_amt
、amount
和未初始化的警告中提到的其他变量。
请注意,在某个函数中声明的所有变量都存储在编译器选择的某个随机内存(堆栈内存)位置中,并且该位置可能包含一些垃圾值,这些值将作为变量的初始值。
因此编译器会预先指示您将它们初始化为某个已知值,这样当您“存入”1000.00 USD
时,您就不会获得银行余额 -1000.00 USD
;-)
【讨论】:
以上是关于C:警告:“withdrawal_amt”可能在此函数中未初始化使用的主要内容,如果未能解决你的问题,请参考以下文章
为啥我会从“double”转换为“float”,可能会丢失数据警告?(c)