C错误给我带来巨大压力

时间:2014-05-13 02:17:06

标签: c arrays function turbo-c

我一直在玩下面的代码,只是试图用Borland编译器进行编译(这是我必须使用的编译器 - 我更喜欢在Linux上使用GCC,但我们在这里)但是没有运气 - 任何人都可以看到任何明显的缺陷吗?

代码

#include<stdio.h>
#define SIZE 10
float money() {
  float wages[SIZE], rise, total;  // where i is initaliser
  float percent = 0.2;
  int i = 0, j;
  for(i = 0; i<SIZE; i++) { 
    wages[i] = j; // Initializing each element seperately 
  }
  printf("Please enter the wages for each staff member\n");
  scanf("%d*%c", &wages[i]);
  rise = wages[i] * percent;
  total = rise + wages[i];
  printf("The new wage is $%f and appears in the %d array slot\n", total, j);
  return(0);
}

int main() {
  money();
  return(0);
}

编译器输出

  

警告W8004 payrise.c 8:'i'被分配一个从未用于功能货币的值

     

警告W8065 payrise.c 23:在函数main中没有原型的情况下调用函数'money'

1 个答案:

答案 0 :(得分:3)

这些都是警告;在这种情况下,警告引用的代码是正确的,但它的样式可以改进。你应该能够运行该程序,即使它显示警告;因为没有错误。 (顺便说一下,你应该有编译器附带的帮助文件;如果发现警告文字不清楚,这些文件会告诉你这些警告意味着什么。)

第一个警告是因为你有:

int i = 0;
for (i = 0;

即。 = 0的第一个设置是多余的,因为您会立即再次将其设置为0

第二个警告是因为您没有为money提供原型。您应该将该函数声明为:

float money(void)

这使它成为原型,如果您稍后尝试将参数传递给函数,则编译器将标记错误。

然而,你的代码还有其他错误,编译器没有诊断出来(或者如果确实如此,你没有让我们知道)。

首先使用j而不初始化它。你应该在使用之前给它一个值。

其次,scanf("%d*%c", &wages[i]);是错误的。 float的格式说明符为"%f",而非"%d*%c"。此外,i此时超出了范围(您是否要将此代码放在循环中?)