恐惧失败的C程序

时间:2011-03-11 10:32:53

标签: c file fread

double buf[1000];
double value;
double *ptr = &value;
for(i=0; i < no_of_iterations; i++) {
  for(j=0; j < chunkSize; j++) {
    num_bytes_read = fread(ptr,1,pcm_sample_size,fptr); //read one sample
    if(num_bytes_read == 2) {
      sum_sq += (*ptr) * (*ptr); //calculate power of each sample
      buf[j] = *ptr;
    }
    else {
      flag = 0;
      break;
    }
  }
  if(!flag) {
    printf("exiting loop");
    break;
  }
  power = sum_sq/chunkSize;//calculate rms value of signals for chunkSize samples
  if(power < threshold) //compare with some value
    printf("power is lower than threshold"); //silence-don't write
  else { //write
    ret = fwrite(buf,1,pcm_sample_size,optr);
    if(ret != 1) 
      printf("error in fwrite %d", ret);
  }
 }
printf("done");
fclose(fptr);
fclose(optr);

以上是我的代码,根据某些条件将一些pcm样本写入文件,但我得到了fread错误。 控件不会输入if(num_bytes_read == 2)块。我认为错误是因为我想读取大小为2字节的pcm样本,我需要在某处存储它。我可以使用什么数据类型来存储2个字节的pcm值(pcm值不是int值)。 请指教。

1 个答案:

答案 0 :(得分:2)

在这一行:

num_bytes_read = fread(ptr,1,pcm_sample_size,fptr);//read one sample

ptr指向值的地址所以它必须是sizeof(double)和1,因为你只读了一个值。

fread的结果是读取的项目数,而不是字节数。

您是否正在初始化sum_sq所需的位置?

阅读2个双打:

double readbuf[2];
num_items_read = fread( readbuf, sizeof(double), 2, fptr );
if( num_items_read == 2 )
{
    covariance_sum += readbuf[0] * readbuf[1];
}

不确定你想要成倍增加,但显然如果它是2个不同的值,它不是“正方形”。我会让你修改你的代码到你的实际逻辑。