C从文件中读取数字并将其放入范围箱中,然后打印到文件中



我对这个程序有问题。

我要做的是从input.txt文件中读取行,其中第一行是文件中的整数数。input.txt格式为

5//整数数量
2
40
49
90
70

然后,我想打印到文件output.txt,这样output.txt基本上就是。

范围0-9 1
范围10-19 0
范围20-29 0
范围30-39 0
范围40-49 2
范围50-59 0
范围60-69 0
范围70-79 1
范围80-89 0
范围90-99 1

范围只会增加到99。因此只有10个范围。因此,input.txt中的第一行之后永远不会有超过99的数字。

我遇到的问题是,只要猜测次数为10,程序就可以正常工作。我知道这与我如何设置范围数以增加有关,因为它与循环有关。我不知道如何正确地做这件事。

有什么建议吗?谢谢,提前!

到目前为止我得到的:

/*
Print a numbers in range to file output.txt from the list of numbers in file input.txt
*/
#include <stdio.h>
int main(void)
{
FILE *input;
FILE *output;
int num_guesses, nums, bin_count=0, guesses_in_bin;
int i, j, k, firstline;
int Bin_Start = 0;
int bin[10];

input= fopen("input.txt", "r");
output= fopen("output.txt", "w");
fprintf(output, "Values        Amountsn");
fscanf(input, "%d", &num_guesses); //scans first line of input.txt for the number of guesses
for (j=0; j< (num_guesses); j++) //for number of guesses run inside loop
{
    for (i=0; i< (num_guesses); i++)
    {
        fscanf(input, "%d", &nums);
        //printf("            %dn", nums);
        if (nums >= Bin_Start && nums <= Bin_Start+9) //checks if number belongs in bin.
            bin_count = bin_count+1;



    }
    //rewind
    rewind(input);
    fscanf(input, "%d", &firstline); // used to ignore first line of file

    //reset bin count
    numbers_in_bin = bin_count;
    bin_count = 0;

    fprintf(output, "%2d - %2d      %d", Bin_Start, Bin_Start+9, numbers_in_bin);
    fprintf(output, "n");
    //Update to next bin
    Bin_Start = Bin_Start+10;


}


fclose(input);
fclose(output);

return 0;
}

在不寻找或多或少微妙的错误的情况下,到此为止,这个解决方案的概念已经是错误的。解决这一问题的唯一合理方法是提前为所有十个可能的bin创建计数器,如:

int bin[10] = { 0 };

然后扫描文件一次,然后做一些像一样简单的事情

bin[input/10]++;

对于输出,在你的箱子上循环,例如:

for (int i = 0; i < 10; ++i)
{
    printf("%d-%d:t%dn", 10*i, 10*i+9, bin[i]);
}

最新更新