繁体   English   中英

在文本文件中读取错误的整数

[英]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

我不明白为什么读取的数字不同。 有人可以帮我吗? 谢谢!

您有两个问题:

  1. 每次while循环重复时,您都执行一个fgetc()从文件中读取一个字符,然后执行fscanf()读取一个整数。 fgetc()干扰fscanf()正确结果。

  2. while循环内还有一个for循环。 这实际上将每个数字计数100次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM