-1

我正在为我的 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

任何想法为什么?谢谢

编辑:

现在我无法创建用于打印帐户交易历史的注册功能。它应该打印出期初余额和期末余额,以及显示已发生的所有交易(存款和取款)的表格。任何帮助将不胜感激

4

3 回答 3

0

您得到的错误不是错误,而是警告。他们指出您没有初始化任何自动存储变量,因此它们将以未指定的值启动。

你可以初始化你的变量,比如 to 0,警告就会消失。

于 2013-12-11T17:35:27.613 回答
0
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;
于 2013-12-11T17:36:59.807 回答
0

我认为您想像这样使用您的功能get_positive_value()

withdrawal_amt = get_positive_value();

和其他类似的。

您正在传递withdrawal_amtamount并且警告中提到的其他变量未初始化。

请注意,在某个函数中声明的所有变量都存储在编译器选择的某个随机内存(堆栈内存)位置中,并且该位置可能包含一些垃圾值,这些值将作为变量的初始值。

因此,编译器会预先指示您将它们初始化为某个已知值,这样您-1000.00 USD在“存款”时就不会获得银行余额1000.00 USD;-)

于 2013-12-11T17:37:36.253 回答