在linux中,如何在c语言中读取文件中的每5位数字而不使用不可见字符?

在linux中,如何在c语言中读取文件中的每5位数字而不使用不可见字符?,c,linux,file,C,Linux,File,我希望每5个字符读取一次,但是当我打印输出时,我得到的字符少于5个,因为源文件中有不可见的字符。我怎么能跳过它们 for(int i=0; i<sizeof(buf);i++){ // perform some operation } printf("%s",buf); 在ctype.h中定义了一个有用的函数,它可以精确地检查您要询问的内容—字符是否是空格 这里还定义了几个其他有趣的字符分类函数: 事实上,有3个函数族可以对字符进行分类,for、for和for 例如

我希望每5个字符读取一次,但是当我打印输出时,我得到的字符少于5个,因为源文件中有不可见的字符。我怎么能跳过它们

for(int i=0; i<sizeof(buf);i++){
// perform some operation 
}
printf("%s",buf);

在ctype.h中定义了一个有用的函数,它可以精确地检查您要询问的内容—字符是否是空格

这里还定义了几个其他有趣的字符分类函数:

事实上,有3个函数族可以对字符进行分类,for、for和for

例如,要避免使用en_US.UTF-8语言环境使用任何类型的空格,请执行以下操作:


不要忘记,这些函数取决于编码。对于不同的编码,相同的字符可能有不同的分类。

是文本文件吗?为什么文本文件中有不可见的字符?循环使用buf中的字符,并使用isgraph判断它是否是打印字符,然后只打印这些字符。显示一些示例输入的十六进制转储。是否有可能是UTF-16,所以不可见字符是空字节?xxd-G1输入文件| sed 3q可能会生成适当的输出。如果输入是UTF-16,你必须努力工作。如果格式是其他格式,则可能更容易。您应该显示所显示十六进制转储输入的预期输出。是。已为作业提供了来源。源文件包含数字和不可见字符。。我和isdigit核对过了。你有文件;我们没有。我们无法帮助您,除非您向我们展示您所拥有的以及您希望从您所拥有的中看到的。这听起来像是一个有问题的格式,但我们无法判断问题有多严重,因为我们看不到它。请阅读有关如何创建MCVE或MRE或SO现在使用的任何名称或SSCCE的内容。
int isalnum(int c);
int isalpha(int c);
int iscntrl(int c);
int isdigit(int c);
int isgraph(int c);
int islower(int c);
int isprint(int c);
int ispunct(int c);
int isspace(int c);
int isupper(int c);
int isxdigit(int c);
int isascii(int c);
int isblank(int c);
#include <stdio.h>
#include <ctype.h>
#include <locale.h>
#include <string.h>

int main(void)
{
    unsigned char * BUF = " a\vb\nc d\tefghijk";
    setlocale(LC_ALL, "en_US.UTF-8");

    for (int i = 0, c = 5; i < strlen(BUF) && c > 0;++i){
        unsigned char chr = BUF[i];
        if (isspace(chr))
                continue;
        printf("%c", chr);
        c--;
    }
    printf("\n");
}