我有一个简单的文件,其中有64个数字(0-16)用列分隔,然后是一个特殊数字(0-9),其后是换行符'\ n',然后是另一组64数字,1个特殊和换行符。 (该文件为reference

#define EXAMPLES 100
#define INPUT 64
#define OUTPUT 10

double s_input [EXAMPLES][INPUT]  ={0};
double s_output[EXAMPLES][OUTPUT] ={0};


int main (int argc, char* argv[]) {
  FILE* f = open("path/to/file","r");
  if (!f) return 1;

  Read_Data_tra(f, s_input, s_output);
  return 0;
}

void Read_Data_tra(FILE*f, double input[EXAMPLES][INPUT], double output[EXAMPLES][OUTPUT]){
  char buff[3];
  double label;
  buff[2] = '\0';
  for(int i=0;i<EXAMPLES;i++){
    for(int y=0;y<64;y++){
        fread(&buff[0],1,1,f);
        fread(&buff[1],1,1,f);
        if(buff[1] != ','){
            buff[2] = '\0';
            input[i][y] = strtol(buff,NULL,10);
            fseek(f, 1, SEEK_CUR);
        }else{
            buff[1] = '\0';
            input[i][y] = strtol(buff,NULL,10);
        }
    }
    fread(&buff[0],1,1,f);
    fread(&buff[1],1,1,f);
    if(buff[1] != '\n'){
        buff[2] = '\0';
        label = strtol(buff,NULL,10);
    }else{
        buff[1] = '\0';
        label = strtol(buff,NULL,10);
    }
    for(int c=0;c<10;c++){
        if(c == label){
            output[i][c] = 1;
        }else{
            output[i][c] = 0;
        }
    }
  }
}


如果我复制例如,这段代码可以完美地工作第一行10次,让它阅读。没问题。但是,如果我按原样读取文件,它将在第5个示例中停止工作。跳过随机数。该行像0,0,5,14,4,0 ...并跳过4.。然后它会被1抵消,并且由于明显的原因而无法正常工作。您可能想自己看看file(几kB)。

我知道这可能会被否决/关闭,但是您知道..我很拼命,如果应该只提供一个提示,我会去做。

最佳答案

看来,读取第65个特殊数字的代码部分也可能是错误的。

您自己说过,第65位只是一个字符,但看起来它正在搜索一个或两个字符。

buff[1] == EOF时,这可能在文件末尾引起问题,从而导致strtol失败。

(摘自评论,以使此内容可以关闭)

关于c - 在C中解析简单数字(ASCII)文件不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49467678/

10-08 22:47
查看更多