当我的文件以文本开头时,fgets读取三个''\ n“

时间:2016-12-02 14:27:21

标签: c fgets strcmp

这是我的功能代码:

char str[DIM_STR];
char tipo[DIM_TIPO];
int j=0, var=0;

for(j=0; j<DIM_STR; j++)
    str[j]='\0';

for(j=0; j<DIM_TIPO; j++)
    tipo[j]='\0';


while(fgets(str, DIM_STR, fp)!=NULL){

    if(str[0]=='\n')
    {
        printf("line %d,LINHA EM BRANCO\n", var);
    }

    else
    {
        sscanf(str, "%s", tipo);

        if(strcmp(tipo, "JANELA")==0){

            sscanf(str, "%s %d %d", tipo, &info_janela[DIM_JANELA][DIM_X], &info_janela[DIM_JANELA][DIM_Y]);
        }

        if(strcmp(tipo, "X")==0){

            sscanf(str, "%s %d %d", tipo, &info_janela[DIM_FIS_X][X_FIS_MAX], &info_janela[DIM_FIS_X][X_FIS_MIN]);
        }

        if(strcmp(tipo, "Y")==0){

            sscanf(str, "%s %d %d", tipo, &info_janela[DIM_FIS_Y][Y_FIS_MAX], &info_janela[DIM_FIS_Y][Y_FIS_MIN]);
        }

        if(strcmp(tipo, "C")==0){

            sscanf(str, "%s %d %d", tipo, &info_janela[CENTRO_REF][X_0], &info_janela[CENTRO_REF][Y_0]);
        }

        if(strcmp(tipo, "ESTRELAS")==0){

            sscanf(str, "%s %d", info_tamanho[ESTRELAS].tipo, &info_tamanho[ESTRELAS].tamanho);

        }

        if(strcmp(tipo, "PLANETAS")==0){

            sscanf(str, "%s %d", info_tamanho[PLANETAS].tipo, &info_tamanho[PLANETAS].tamanho);

        }

        if(strcmp(tipo, "ASTEROIDES")==0){

            sscanf(str, "%s %d", info_tamanho[ASTEROIDES].tipo, &info_tamanho[ASTEROIDES].tamanho);

        }

        if(strcmp(tipo, "FRAGMENTOS")==0){

            sscanf(str, "%s %d", info_tamanho[FRAGMENTOS].tipo, &info_tamanho[FRAGMENTOS].tamanho);

        }

    }

    var++;

}

定义列表:

#define DIM_TIPO 10
#define DIM_INFO_CORPOS 4
#define DIM_STR 100

#define DIM_JANELA 0
#define DIM_X 0
#define DIM_Y 1

#define DIM_FIS_X 1
#define X_FIS_MIN 0
#define X_FIS_MAX 1

#define DIM_FIS_Y 2
#define Y_FIS_MIN 0
#define Y_FIS_MAX 1

#define CENTRO_REF 3
#define X_0 0
#define Y_0 1

#define ESTRELAS 0
#define PLANETAS 1
#define ASTEROIDES 2
#define FRAGMENTOS 3

这是文件:

JANELA 600 400

X 1000 -1000
Y 900 -900

C 300 200

ESTRELAS 20
PLANETAS 10
ASTEROIDES 6
FRAGMENTOS 3

它以文本开头 - JANELA ...,为什么它首先读取3个空白行?

这是输出:

line 1,BLANK LINE
line 4,BLANK LINE
line 6,BLANK LINE
600
400
-1000
1000
-900
900
300
200

编辑:这是文件:https://www.dropbox.com/s/ky1ctic8f35y81j/sim_config.txt?dl=0

1 个答案:

答案 0 :(得分:1)

只需将您的文件内容(来自dropbox中的文件)粘贴到新的gedit窗口中,看到JANELA这个词之前有3个换行符。下载时,文件没有显示任何空白行,并且片段的输出也不是空行,因此从dropbox下载文件并使用它。 我的代码:

FILE *fp=fopen("sim_config.txt","a+");

char * str=malloc(sizeof(char)*100);

while(fgets(str, sizeof(str), fp)!=NULL){

    if(strcmp(str,"\n")==0 || (strcmp(str,"\r\n")==0))
    {
        printf("BLANK LINE\n\n");
    }
    else 
    {
        printf("ok\n");
    }
  }
}

输出: 好 好 BLANK LINE

BLANK LINE

确定 好 好 好 BLANK LINE

确定 好 BLANK LINE

确定 好 好 好 好 好 好 好 ///没有空行