c - 打印时忽略空格

标签 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;
    }

最佳答案

您可以使用 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;
   }

关于c - 打印时忽略空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33986212/

相关文章:

c - 从文件中删除 c 注释

c - 子函数内的 malloc、free 和 memmove

c - 在 C 中使用结构

javascript - 无效的字符串长度/分配大小重载 JavaScript

java - 字符串 - 它们是如何工作的?

C 的格式说明符

C - 用空格替换制表符,用 1 个空格替换多个空格,用 1 个换行符替换多个换行符

Python3,连接的字符串不起作用

.net - String.Join 与 StringBuilder : which is faster?

java - 字符串格式参数在 android 上的 string.xml 中不起作用