Fscanf читает несоответствующий формат из ввода - PullRequest
0 голосов
/ 26 января 2020

Я хочу прочитать из файла только строки, соответствующие этому формату: identifier = any-char-string , и игнорировать строки, которые не соответствуют. Также я хочу поместить идентификатор в переменную и any-char-string в другую.

Мой код: if(fscanf(f,"%[^=]=%[^\n]",l.iden,l.string)==2).

Для правильного ввода, такого как: "name = string", оно работает хорошо, но проблема в том, что когда я ввожу несопоставимый ввод, такой как: "i go home", у него нет знака "=", но эта строка интерпретируется как правильное. Есть предложения?

1 Ответ

0 голосов
/ 26 января 2020

Вы должны поставить пробелы с обеих сторон знака равенства. В противном случае он не сможет отличить guish знак равенства от строк.

#include<stdio.h>
#include<string.h>
int main()
{
    freopen("input.txt", "r", stdin);

    char identifier[100], any_char_str[100];

    while(1)
    {
        int ret_count = scanf("%s = %s", identifier, any_char_str);

        if(ret_count == EOF || ret_count == 0) // If it reaches to the EOF break the loop or if "scanf()" consumes nothing
        {
            break;
        }
        else if(ret_count != 2) // If exactly two strings are not found maintaining this %s = %s pattern ignore it (if more than one '=' is found like a = b = c it will take upto which the pattern is maintained)
        {
            continue;
        }

        printf("%s %s\n", identifier, any_char_str);
    }
}
...