Чтение строк из текстового файла в C и определение конца строки - PullRequest
3 голосов
/ 14 января 2012

Я пытаюсь прочитать слова и цифры из текстового файла с пробелами и символами табуляции.Мне нужно определить строки, которые содержат «Шаг» и «Ложь».Мне также нужно хранить каждое слово или число отдельно, чтобы потом их можно было выбросить позже.

У меня возникают проблемы при попытке написать часть кода, которая идентифицирует «False» в конце строки.Мне нужно, чтобы код распознал, что он достиг False, и прервал цикл for.

Примечание. Он разработан так, что вы вводите свой собственный путь.Эта часть работает.Кроме того, я прочитал, что fscanf намного сложнее в использовании, чем fgets и fputs, но файлы данных, которые я читаю, очень согласованы по формату.Кажется, это хорошо работает для моих целей, так как некоторые записи должны быть удвоены.

    int j;
    int k;
    char i[4];                       
    char File_path[40];
    char dummy;
    char stuff[7] = "False"

    printf("Input Path: ");
    scanf("%s", &File_path);
    printf("Reading:  %s\n\n",File_path);
    FILE *fp;
    fp=fopen(File_path, "r");
    for(j=0; j<7 && i != stuff; j++)
    {
        fscanf(fp,"%s",i);
        fprintf(stdout,"Read:  %s\n",i);
    }
    fclose(fp);

Файл, который я читаю:

True.0 kinda false False False

Возвращает:

Reading:  c:\\Data\\1.txt

Read:  True.0
Read:  kinda
Read:  false
Read:  False
Read:  False
Read:  False
Read:  False

Я попытался изменить значение на «Ложь», и я получил тот же результат.

1 Ответ

4 голосов
/ 14 января 2012

Вы не можете сравнивать строки таким способом в C. Вам нужно использовать strcmp() или strncmp(), чтобы сделать это:

for (j = 0; j < 7 && strcmp(i, stuff); j++)

Этот условный цикл в первый раз оборвется i указывает на "False". Вам также нужно увеличить i - вы переполните этот буфер при первом чтении в вашем примере.

Редакция - вы действительно хотите использовать fgets() и strtok() или одного из их родственников для проработки этого материала.

...