从文件中读取一个数字,然后读取C

时间:2020-05-06 16:02:44

标签: c

如何从文件中读取数字和数组之后。我的意思是我的文件看起来像这样: 3 7 8 9

3是组件的数目,数组的其他组件7、8、9,arr [1],arr [2],arr [3]。

1 个答案:

答案 0 :(得分:1)

执行所需功能的一种方法是:

首先,打开文件进行读取:

FILE *fp = fopen( "filename.txt" );

然后检查对fopen()的调用是否成功并处理任何错误:

if( ! fp )
{
    perror( "fopen to read filename.txt failed" );
    exit( EXIT_FAILURE );
}

注意:perror()会同时输出您的错误消息和系统认为错误发生的文本原因,stderr。应该在哪里输出错误消息。

保留变量以容纳以下值的计数:

int maxLoops;

然后读取第一个数字,并使用该数字作为循环的最大迭代次数,当然,要检查错误

if( fscanf( fp, "%d", &maxLoops ) != 1 )
{
    fprintf( stderr, "fscanf to read loop count failed\n" );
    exit( EXIT_FAILURE );
}

注意:当某些scanf()(在这种情况下为errno)失败时,input format specifier系列函数未设置%d,因此需要使用某些内容输出错误消息像fprinf()

注意:scanf()函数家族返回成功的input format conversions(或EOF)的数量

注意:exit()EXIT_FAILURE通过以下方式公开:

#include <stdlib.h>

然后,使用C的可变数组长度功能,为文件中的以下条目保留一个数组

int dataArray[ maxLoops ];

现在,设置循环以读取其余数据

for( int i = 0; i < maxLoops; i++ )
{

对于每次循环,都将另一个条目读入数组,当然,要检查错误

    if( fscanf( fp, "%d", &dataArray[i] ) != 1 )
    {
        fprintf( stderr, "fscanf for data value failed\n" );
        exit( EXIT_FAILURE );
    }
}  // end the loop

然后,在执行其他任何操作之前先进行清理:

fclose( fp );

由您决定如何处理数据。您可能希望通过循环打印出每个数据值,类似于:

for( int i = 0; i < maxLoops; i++ )
{
    printf( "entry %d = %d\n", i, dataArray[i] );
}

注意:调用printf()时无需获取变量的地址(除非您要打印该地址)。但是,在输入变量时,就像在调用fscanf()时一样,需要变量的地址。