C 变量和/或数组的问题

C 变量和/或数组的问题,c,arrays,variables,C,Arrays,Variables,因此,我正在编写一个C代码,它将接受用户输入(以存款金额(如银行)和存款剩余时间的形式),并给出一个“利率”,或者更简单地说,只是一个十进制数字。我不知道为什么它不起作用。它应该将一个文件读入一个数组,然后根据该数组进行计算。当我说它不工作时,它会在表中读取,请求用户输入,但不管用户输入如何,它都会输出0。它唯一能做的另一件事是在用户输入“无”时退出。 代码如下: #include <stdio.h> #include <stdlib.h> #include <st

因此,我正在编写一个C代码,它将接受用户输入(以存款金额(如银行)和存款剩余时间的形式),并给出一个“利率”,或者更简单地说,只是一个十进制数字。我不知道为什么它不起作用。它应该将一个文件读入一个数组,然后根据该数组进行计算。当我说它不工作时,它会在表中读取,请求用户输入,但不管用户输入如何,它都会输出0。它唯一能做的另一件事是在用户输入“无”时退出。 代码如下:

#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);
}

好的,我知道了。首先,i=0在循环中,导致它被重复(感谢rmartinjak)。另一部分是我有:

while(time < month[j]){
j++;
}
我从下面的行中删除了“=”:

if(amount >= 1000 && amount <= 9999){
如果(金额>=1000&&amount 1000&&amount<9999){

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

问题是,在每次循环读取文件时,您都将
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++;
}

如果输入的月数不是
84
,则将
j
增加到
month
的范围之外。无论如何,如果有人输入的月数不在列表中,例如
4
“不起作用”,则应检查
month
的范围不是一个好的错误描述。好的,所以当我说它不工作时,它会在表中读取,请求用户输入,但它会输出0,用户输入不受控制。它唯一能做的其他部分是在用户输入“无”时退出。请阅读。注意
scanf()
无法读取所有字段时,将返回一个小于4的数字。一个问题是,由于
scanf()
字符串不能处理被空格包围的
-
,因此您实际上没有读取数据。您应该检查
是否(scanf(…)!=4)
以更好地覆盖错误情况。调试时,最基本的技术是打印您读取的数据,以确保您确实读取了您认为正在读取的数据。(循环中的
i=0
也错误。)正在读取的文件没有连字号。它只是空格。我有这样的格式,因此格式保留在帖子中。啊,我在循环中没有看到。因此我修复了这个问题,但仍然存在问题。:\此外,程序应该考虑介于两者之间的数字。例如:我输入4,代码应该使用thr下的信息这是一个问题,不是唯一的问题。
if(amount >= 1000 && amount <= 9999){
if(amount > 1000 && amount < 9999){
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++;
}
while(time != month[j]){
    j++;
}