首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何打印fread()?

如何打印fread()?
EN

Stack Overflow用户
提问于 2014-08-06 12:24:22
回答 5查看 7.1K关注 0票数 2

我发誓,在问到这里之前,我已经做了很多研究,但是找不到任何可以帮助我的东西。

我有一个扩展名为.pcm的文件,该文件包含数据(以数字表示),我想在以后的一些操作中使用这些数据。现在,为了看数据是什么,我只想打印它的内容。由于我以前在MatLab中使用过相同的文件,所以可能应该将其读为short类型。

代码语言:javascript
复制
#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",则得到相同的结果。哪一种是翻阅文件的理想方式?

**编辑:最后,我的文件实际上是空的:(不管怎样,这里的答案是有用的,并且学到了很多东西。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-08-06 12:30:57

你需要:

代码语言:javascript
复制
for (i = 0; i < 100; i++)
{
   fread(input, sizeof(short), 1, fp); 
   printf("%hd", input[0]);
}

或者更好的选择:

代码语言:javascript
复制
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的输出,但它不包含数据读取,而是返回读取的数据量。见这里

返回值:

返回成功读取的元素总数。

票数 -1
EN

Stack Overflow用户

发布于 2014-08-06 13:45:28

这里有一个方法:

sizeof *input给出了一个数组元素中的字节数;它等同于sizeof (short)

代码语言:javascript
复制
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,要么输入出现了错误:

代码语言:javascript
复制
if ( !itemsRead )
{
  if ( feof( fp ) )
    fprintf( stderr, "hit end-of-file\n" );
  else
    fprintf( stderr, "error during read\n" );
}
票数 3
EN

Stack Overflow用户

发布于 2014-08-06 12:30:27

fread返回读取的项目数或零项。您还必须使用feof,因为fread没有区分EOF和error。

这可能对您更好,一个字节一个字节地读取:

代码语言:javascript
复制
int c;
FILE *file;
file = fopen("Sweep_10_310.txt", "r");
if (file) {
    while ((c = getc(file)) != EOF)
        putchar(c);
    fclose(file);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25160332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档