变量和/或数组问题

时间:2014-02-08 15:20:46

标签: c arrays variables

所以我正在制作一个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){

现在一切似乎都很好。再次感谢大家的帮助!

1 个答案:

答案 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