我一直在玩下面的代码,只是试图用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'
答案 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
此时超出了范围(您是否要将此代码放在循环中?)