我有一个简单的文件,其中有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/