C 而从文件读取的循环跳过第一行
我必须逐行将文件中的数据读取到结构数组中,但它跳过了第一行。我在其他地方发现,由于fgets和sscanf组合,第二行是第一行,但我不明白为什么或如何解决这个问题。任何建议或指向正确的方向都会很棒C 而从文件读取的循环跳过第一行,c,C,我必须逐行将文件中的数据读取到结构数组中,但它跳过了第一行。我在其他地方发现,由于fgets和sscanf组合,第二行是第一行,但我不明白为什么或如何解决这个问题。任何建议或指向正确的方向都会很棒 void readData(){ char line[50]; char name1[1][50]; int O, M, R, W; input = fopen("input2.dat", "r"); //count = 0; while(fgets
void readData(){
char line[50];
char name1[1][50];
int O, M, R, W;
input = fopen("input2.dat", "r");
//count = 0;
while(fgets(line, 50, input) != NULL){
hasReadData = 1;
sscanf_s(line, "%20s %d %d %d %d", name1[0], 50, &O, &M, &R, &W);
for(i=0; i<200; i++){
if(strcmp(name1[0], player_arr[i].name) == 0){
if(O<0 || M<0 || R<0 || W<0){
printf_s("%s %d %d %d %d", name1[0], O, M, R, W);
printf_s("\tNegative value, data invalid\n");
break;
}
if(O<M){
printf_s("%s %d %d %d %d", name1[0], O, M, R, W);
printf_s("\tOvers less than Maidens, data invalid\n");
break;
}
if(W>10){
printf_s("%s %d %d %d %d", name1[0], O, M, R, W);
printf_s("\tWickets greater than 10, data invalid\n");
break;
}
player_arr[i].oversOverall += O;
player_arr[i].maidensOverall += M;
player_arr[i].runsOverall += R;
player_arr[i].wicketsOverall += W;
player_arr[i].oversLatest = O;
player_arr[i].maidensLatest = M;
player_arr[i].runsLatest = R;
player_arr[i].wicketsLatest = W;
}
}
}
fclose(input);
}
如果while在读取文件时跳过第一行,则在while循环中使用以下命令: 文件_pointer.seekg0,ios::beg
此文件指针将设置指向文件开头的指针 发布文件的第一行和第二行。1检查并报告sscanf_sline的结果,%20s。。。。2发布玩家的定义。我猜:文件中的名字有空格和sscanf\u sline,%20s%d。。。只将名字放在名称1[0]中,留下%d来处理姓氏。通过检查if 5!=斯坎夫斯林,。。。宣布错误;代码会检测到这一点和其他问题。sscanf不应该导致您跳过一行。你读到的源可能一直在讨论SCAF和FFET的组合。问题是标记C,所以C++流是不可用的。