我有一段代码可以从文件输入中读取一行。我的目标是如果一行是空白(\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/