【问题标题】:Avoiding the blank in files避免文件中的空白
【发布时间】:2019-04-08 10:50:26
【问题描述】:

我正在编写 C 代码,试图避免文件中出现空格。我只想在每次出现的连接空白处都计算一个。
例如,如果我有这样的事情:
This is just a test
在这些词之间添加任何空格,例如 '\n'' '\t。我试过这个:

if( (current_c == ' ') || (current_c == '\t') || (current_c == '\n') ){
            blank_counter++;
            do{
                fgetpos(file, &position);
            } while( (fgetc(archivo) == ' ') || (fgetc(archivo) == '\t') || (fgetc(archivo) == '\n') );
            fsetpos(file, &position);
            \***********************************************
            *******This is just debugging block*************
            printf("The current char: %c\n", current_c);
            fputc(c, file);
            ************************************************\
        }

如您所见,上述功能只是其中的一部分。一开始我有第一条指令:
while( (current_c = fgetc(file)) != EOF )
并与 fsetpos()fgetpos() 一起使用声明性 fpos_t position;
我有点烦恼。如果你运行代码,你可能会出错。当出现'\n' 时,指针无法识别它。
有没有人可以帮我解决这个问题?

【问题讨论】:

  • 如果您提供 MCVE (minimal reproducible example) 会有所帮助。您以\************************************ 开头的符号不是评论;您使用了反斜杠而不是(正向)斜杠/。这意味着代码无法编译,这意味着很难知道你在做什么。然而,使用fgetpos()fsetpos() 似乎完全没有必要。你当然可以使用just fgetc()` 和ungetc() 来处理它——尽管不需要使用ungetc()。您可能也应该使用来自<ctype.h> 标头的isspace()isblank()

标签: c pointers file-io counting file-pointer


【解决方案1】:

如果你需要统计一个或多个空格、制表符或换行符的序列数,那么代码基本上是微不足道的:

FILE *archivo = …
int c;
int blank_counter = 0;
while ((c = getc(archivo)) != EOF)
{
    if (c == ' ' || c == '\t' || c == '\n')
    {
        blank_counter++;
        while ((c = getc(archivo)) != ' ' && c != '\t' && c != '\n')
            ;
    }
}

当您遇到空白、制表符或换行符时,增加计数器,然后尽可能多地读取可用的空白、制表符或换行符。在这种情况下,内部循环读取其他字符并不重要。这只是标记空白序列的结束,并且外部循环继续,直到读取下一个空白。

【讨论】:

    猜你喜欢
    • 2018-10-18
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    相关资源
    最近更新 更多