忽略打印​​中的空白区域

时间:2015-11-29 18:14:37

标签: c string

我有一个代码来从文件输入中读取一行。我的目标是如果一行是空白(或者是\ n \ t或空格),跳过该行并继续到下一行。我这样做有问题。如果该行仅是"输入键[\ n]"我的代码有效,但是,如果该行只包含\ t(制表符)或空格,则它不起作用。这是代码。有人可以帮助我如何忽略该行是否完全是空格?谢谢

while(!feof(input)){

    fgets(word,1000,input);

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

2 个答案:

答案 0 :(得分: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?

正如@chux所说,它可以简化,并且可以避免对strlen()的调用:

int is_whitespace(char *word) { 

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

   return *word == 0;
   }

答案 1 :(得分:1)

char ch;
if(1 != sscanf(word, " %c", &ch)){
    continue;
}