我对这个程序有问题。
我要做的是从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]);
}