2014-10-07 2 views
1

Я пытаюсь прочитать файл формыФильтрация строк с помощью fscanf

A number,number 
A number,number 
[space] B number,number 
etc 

где я хочу читать только те строки, которые начинаются с пробела (т.е., в приведенном выше примере, в последней строке только). Я написал этот цикл:

while ((g = fscanf(fp," %c %x,%d\n",&a,&b,&c) != EOF){ 
     printf("%c %x,%d\n",a,b,c); 
    } 

но, несмотря на пространство, которое я положил в начале строки, он все еще выводит все строки. Я знаю, что могу фильтровать их внутри цикла, но можно ли указать его в fscanf?

+3

Используйте 'fgets()'. – chux

ответ

3

ОП: можно указать его в fscanf?
A: Да, но его уродливые. Используйте лучший инструмент для работы.

Используйте fgets(), затем сканируйте с помощью sscanf().

char buf[100]; 
char a; 
unsigned b; 
int c; 
while (fgets(buf, sizeof buf, fp) != NULL) { 
    // Thank-you @Chris Dodd 
    if ((buf[0] == ' ') && (sscanf(buf, " %c%x,%d", &a,&b,&c) == 3)) { 
    printf("%c %x,%d\n",a,b,c); 
    } 
} 
+2

'sscanf' нуждается в' buf' в качестве первого аргумента (строка для сканирования). Как есть, это должно дать вам неприятные предупреждения компилятора. –

0

Один из способов добиться того, что вы хотите использовать ЕОКП и проверить пространство, если пространство находится вызов ungetc и читать строку, используя fgets еще прочитать строку и пропустить его

Смежные вопросы