繁体   English   中英

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

[英]Read from file a number and after that an array in C

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

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

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

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

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

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

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

注意: perror()将您的错误消息和系统认为错误发生的文本原因输出到stderr 这就是错误消息应该是 output 的地方。

保留一个变量来保存以下值的计数:

int maxLoops;

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

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

注意:当某些input format specifier (在本例中%d )失败时, scanf()系列函数不会设置errno ,因此需要使用fprinf()类的方法向 output 发送错误消息。

注意: scanf()系列函数返回成功input format conversions (或 EOF)的次数

注意: exit()EXIT_FAILURE通过以下方式暴露:

#include <stdlib.h>

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

int dataArray[ maxLoops ];

现在,设置将读取数据的 rest 的循环

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()时需要变量的地址。

暂无
暂无

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

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