2015-11-29 2 views
1

У меня есть код для чтения строки из ввода файла. Моя цель состоит в том, что строка является пустой (либо \ n \ t или пробелами), пропустите строку и перейдите к следующей строке. У меня есть проблема в этом. Мой код работал, если строка только «введите ключ [\ n]», однако, если строка состоит только из \ t (tab) или пробелов, она не работает. Вот код. Может кто-нибудь помочь мне, как игнорировать, если линия полностью пробелы? СпасибоИгнорировать пробелы в печати

while(!feof(input)){ 

    fgets(word,1000,input); 

    if((strcmp(word,"\n")==0) || (strcmp(word,"\t\n")==0) || (strcmp(word," \n")==0)){ 
     continue; 
    } 
+0

вы можете обратиться D & R с программирования книги подобный вопрос задается Думаю –

ответ

2

Вы можете использовать isspace() в цикле:

int is_whitespace(char *word) { 
    size_t spaces = 0; 
    size_t i = 0; 
    size_t slen = strlen(word); 

    for (i = 0; i< slen; i++) 
     if (isspace((int)word[i])) spaces++; 

    return spaces == slen; 
} 

и тогда вы сможете:

while(fgets(word,1000,input)) { 

    if (is_whitespace(word)) 
     continue; 
} 

Кроме того, условие цикла неправильно. См Why is “while (!feof (file))” always wrong?


Как suggusted по @chux, она может быть упрощена, и вызов strlen() можно избежать:

int is_whitespace(char *word) { 

    while (isspace((unsigned char) *word)) 
    word++; 

    return *word == 0; 
    } 
+0

спасибо. но будет ли isspace включать \ t и \ n? –

+0

Да. Он включает все пробелы. Руководство говорит: * проверяет символы пробела. В локалях «C» и «POSIX» это: space, form-feed ('\ f'), newline ('\ n'), возврат каретки ('\ r'), горизонтальная вкладка ('\ t'), и вертикальная вкладка ('\ v'). * –

+0

Извините @blue Moon, но она по-прежнему игнорирует строку, состоящую только из \ t (tabs) –

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