所以我正在制作一个C代码,它将接受用户输入(以存款金额的形式[如银行]和存款将保留的时间。)并提出“利率”,或者更简单,只是一个十进制数。我不知道为什么它不会工作。它应该将我拥有的文件读入数组,并根据该数组进行计算。当我说它不起作用时,它会在表中读取,询问用户输入,但无论用户输入如何都会输出0。它可以做的唯一其他部分是当用户输入'none'时退出。 这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
FILE *unit2;
int main()
{
int month[14];
float num1[14];
float num2[14];
float num3[14];
float numin1, numin2, numin3;
char input[100];
int time;
float amount;
float output = 0;
int numin;
int i, j;
int nret;
unit2 = fopen("units2.txt", "r");
printf("Months\t\t\t Interest\n");
while(!(feof(unit2)))
{
i = 0;
nret = fscanf(unit2, "%d %f %f %f", &numin, &numin1, &numin2, &numin3);
if(nret == EOF)
break;
month[i] = numin;
num1[i] = numin1;
num2[i] = numin2;
num3[i] = numin3;
printf(" %d\t\t%1.2f %1.2f %1.2f %1.2f %1.2f %1.2f\n", numin, numin1, numin1, numin2, numin2, numin3, numin3);
i++;
}
printf("\nEnter your deposit amount, followed by the duration in months. Or, type 'none' to exit.\n");
gets(input);
sscanf(input, "%f %d", &amount, &time);
if(!strcmp(input, "none")){
printf("\nCome back later!\n");
exit(0);
}
if(time <= 0){
printf("Please enter a larger amount of months.\n");
}
if(time >= 120){
printf("Please enter a smaller amount of months\n");
}
if(amount <= 999){
printf("Please enter a larger deposit.\n");
}
j = 0;
while(time != month[j]){
j++;
}
if(amount >= 1000 && amount <= 9999){
output = num1[j];
}
else if(amount >= 10000 && amount <= 99999){
output = num2[j];
}
else if(amount >= 100000){
output = num3[j];
}
printf("Your interest rate will be %f.\n", output);
}
程序正在读取的文件有这个图表:
1 - 0.02 0.03 0.05
2 - 0.02 0.03 0.05
3 - 0.02 0.05 0.10
6 - 0.05 0.10 0.15
9 - 0.05 0.10 0.15
12 - 0.05 0.15 0.20
18 - 0.15 0.25 0.30
21 - 0.15 0.25 0.30
24 - 0.15 0.25 0.30
30 - 0.15 0.25 0.30
36 - 0.15 0.35 0.40
48 - 0.25 0.45 0.50
60 - 0.35 0.55 0.60
84 - 0.35 0.55 0.60
好的,我明白了。首先,i = 0在循环中,导致它重复(感谢rmartinjak)。另一部分是我:
while(time < month[j]){
j++;
}
这使它即使在过去的时间也会继续增加j。 所以我只是改变了'&lt;'到'&gt;':
while(time > month[j]{ \\so it will stop when at time.
j++;
}
我从这样的行中删除了'=':
if(amount >= 1000 && amount <= 9999){
到此:
if(amount > 1000 && amount < 9999){
现在一切似乎都很好。再次感谢大家的帮助!
答案 0 :(得分:1)
问题是你在读取文件的循环的每次迭代中都将i
设置为0
。
while(!(feof(unit2)))
{
i = 0; // <-- HERE
nret = fscanf(unit2, "%d %f %f %f", &numin, &numin1, &numin2, &numin3);
if(nret == EOF)
break;
month[i] = numin;
num1[i] = numin1;
num2[i] = numin2;
num3[i] = numin3;
printf(" %d\t\t%1.2f %1.2f %1.2f %1.2f %1.2f %1.2f\n", numin, numin1, numin1, numin2, numin2, numin3, numin3);
i++;
}
因此只会修改month[0]
。这可能会导致循环
while(time != month[j]){
j++;
}
如果您输入的内容超过j
而不是月份,则month
超出84
的范围。无论如何,你应检查month
的界限,以防有人输入不在列表中的月份,例如: 4
。