如何从文件中读取数字和数组之后。我的意思是我的文件看起来像这样: 3 7 8 9
3是组件的数目,数组的其他组件7、8、9,arr [1],arr [2],arr [3]。
答案 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()
时一样,需要变量的地址。