[英]Reading wrong integers in text file
我需要提出一个程序,该程序读取数字列表并生成值的直方图。 数字在文本文件中逐行列出。 因此,我认为使用fscanf是合适的,因为它会在输入空白字符时停止读取。 但是,我不确定在fgets还是fscanf之间。 我选择fscanf的另一个原因是因为fscanf只是将读取的数字分配给变量,而不是数组。 我不需要数组,因为我只想检查条件下读取的每个数字并增加相应的计数器。 无论如何,代码无法正常工作,并且在尝试找出问题所在时,我让它打印出读取的数字,并且我不知道为什么读取的数字与文本文件中的数字不同。 预期的执行跟踪是:
1- 9: XXXX
10-19: XXXXXXXXXXXXXXXXXXXX
20-29: XXXXXXXXX
这是我的代码:
#include <stdio.h>
int main ()
{
FILE *ptr_file;
int count [10] = {0}, a = 0;
ptr_file = fopen("histogram-input.txt", "r");
if ( !ptr_file )
return 1;
while ( fgetc(ptr_file) != EOF )
{
fscanf (ptr_file, "%d", &a);
printf("%d\n", a);
if ( a >=1 && a <= 9 )
{
count [0] ++;
}
else if ( a >= 10 && a <= 19 )
{
count [1] ++;
}
else if ( a >= 20 && a <= 29 )
{
count [2] ++;
}
else if ( a >= 30 && a <= 39 )
{
count [3] ++;
}
else if ( a >= 40 && a <= 49 )
{
count [4] ++;
}
else if ( a >= 50 && a <= 59 )
{
count [5] ++;
}
else if ( a >= 60 && a <= 69 )
{
count [6] ++;
}
else if ( a >= 70 && a <= 79 )
{
count [7] ++;
}
else if ( a >= 80 && a <= 89 )
{
count [8] ++;
}
else if ( a >= 90 && a <= 99 )
{
count [9] ++;
}
}
fclose ( ptr_file );
for ( int k = 0; k < 10; k++ )
{
if ( k == 0 )
{
printf("1-9: ");
for ( int h = 1; h <= count [0]; h++ )
{
printf("X");
}
printf("\n");
}
else
{
printf("%d-%d: ", k*10, k*10 + 9 );
for ( int h = 1; h <= count [k]; h++ )
{
printf("X");
}
printf("\n");
}
}
return 0;
}
我的程序的直方图输出中的Xs进行了太多次。
这是我执行跟踪的一小部分:
12
45
95
72
28
7
我的文本文件中的第一个数字是:
1
57
51
31
68
98
6
我不明白为什么读取的数字不同。 有人可以帮我吗? 谢谢!
您有两个问题:
每次while循环重复时,您都执行一个fgetc()
从文件中读取一个字符,然后执行fscanf()
读取一个整数。 fgetc()
干扰fscanf()
正确结果。
while循环内还有一个for循环。 这实际上将每个数字计数100次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.