我发誓,在问到这里之前,我已经做了很多研究,但是找不到任何可以帮助我的东西。
我有一个扩展名为.pcm的文件,该文件包含数据(以数字表示),我想在以后的一些操作中使用这些数据。现在,为了看数据是什么,我只想打印它的内容。由于我以前在MatLab中使用过相同的文件,所以可能应该将其读为short类型。
#include <stdio.h>
int main()
{
FILE *fp;
short input[1000];
int i;
fp=fopen("Sweep_10_310.pcm", "rb");
if (!fp) {
printf("Could not open file!\n");
return 1;
}
for (i = 0; i < 100; i++)
{
printf("%d",fread(input,sizeof(short),1,fp));
}
fclose(fp);
return 0;
}控制台只打印零。
如果我将文件更改为不同的文本文件(只是为了测试代码),并将所有"short“更改为"char",则得到相同的结果。哪一种是翻阅文件的理想方式?
**编辑:最后,我的文件实际上是空的:(不管怎样,这里的答案是有用的,并且学到了很多东西。
发布于 2014-08-06 12:30:57
你需要:
for (i = 0; i < 100; i++)
{
fread(input, sizeof(short), 1, fp);
printf("%hd", input[0]);
}或者更好的选择:
fread(input, sizeof(short), 100, fp);
for (i = 0; i < 100; i++)
{
printf("%hd", input[i]);
}就你而言:
printf("%d",fread(input,sizeof(short),1,fp));
您正在打印fread的输出,但它不包含数据读取,而是返回读取的数据量。见这里。
返回值:
返回成功读取的元素总数。
发布于 2014-08-06 13:45:28
这里有一个方法:
sizeof *input给出了一个数组元素中的字节数;它等同于sizeof (short)。
short input[NUM_ITEMS] = {0};
...
int itemsRead = fread( input, sizeof *input, NUM_ITEMS, fp );
for ( int i = 0; i < itemsRead; i++ )
{
/**
* use %hd format specifier for short values
*/
printf( "%hd ", input[i] );
}
putchar( '\n' );如果itemsRead为0,那么您要么按了EOF,要么输入出现了错误:
if ( !itemsRead )
{
if ( feof( fp ) )
fprintf( stderr, "hit end-of-file\n" );
else
fprintf( stderr, "error during read\n" );
}发布于 2014-08-06 12:30:27
fread返回读取的项目数或零项。您还必须使用feof,因为fread没有区分EOF和error。
这可能对您更好,一个字节一个字节地读取:
int c;
FILE *file;
file = fopen("Sweep_10_310.txt", "r");
if (file) {
while ((c = getc(file)) != EOF)
putchar(c);
fclose(file);
}https://stackoverflow.com/questions/25160332
复制相似问题