Что не так с этим кодом C?

Я написал программу на C для категоризации некоторых строк. Я использую потоки FILE для чтения и записи файлов. Но я нашел проблему. Обычно он должен классифицировать строки, но это не так. Я думаю, что этот код в порядке, поэтому я не могу найти проблему. Помогите мне, пожалуйста.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char line[80]; //create a string
    FILE *r_in = fopen("spooky.csv", "r"); // this is the source file
    FILE *w_ufo = fopen("ufo.txt", "w"); // strings with "UFO" will be written to here
    FILE *w_disapp = fopen("disappearance.txt", "w"); // strings with "Disappearance" will be written to here  
    FILE *w_others = fopen("others.txt", "w"); // others will be written to here

    while (fscanf(r_in, "%79[\n]\n", line) == 1)
    {
        if(strstr(line, "UFO")) // I think here is the problem (with strstr())
            fprintf(w_ufo, "%s\n", line);
        else if(strstr(line, "Disappearance"))
            fprintf(w_disapp, "%s\n", line);
        else
            fprintf(w_others, "%s\n", line);
    }

    fclose(w_ufo);
    fclose(w_disapp);
    fclose(w_others);

    return 0;
}

Исходный файл "spooky.csv":

30.685163,-68.137207,Type=Yeti
28.304380,-74.575195,Type=UFO
29.132971,-71.136475,Type=Ship
28.343065,-62.753906,Type=Elvis
27.868217,-68.005371,Type=Goatsucker
30.496017,-73.333740,Type=Disappearance
26.224447,-71.477051,Type=UFO
29.401320,-66.027832,Type=Ship
37.879536,-69.477539,Type=Elvis
22.705256,-68.192139,Type=Elvis
27.166695,-87.484131,Type=Elvis

Я думаю, что проблема в strstr(), расскажите о проблеме.


person 0xEDD1E    schedule 13.08.2012    source источник
comment
Если вы хотите прочитать всю строку, вы должны вместо этого использовать fgets.   -  person Some programmer dude    schedule 13.08.2012


Ответы (1)


Проблема в fscanf. Вы, вероятно, хотите:

while (fscanf(r_in, "%79[^\n]\n", line) == 1)
                         ^

Или просто используйте fgets, как прокомментировал Иоахим Пилеборг.

while (fgets(line, sizeof(line), r_in))
person cnicutar    schedule 13.08.2012