Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 而从文件读取的循环跳过第一行_C - Fatal编程技术网

C 而从文件读取的循环跳过第一行

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

我必须逐行将文件中的数据读取到结构数组中,但它跳过了第一行。我在其他地方发现,由于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(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++流是不可用的。