如何在文本文件中插入N个空格

How do you insert N blank spaces in text file

我创建了一个程序来读取用户输入的文件并且

文件内部包含格式化功能,例如 .br.spX,其中 X 是一个整数。

所以我正在尝试在输出中实现这些格式化功能。

我已经让我的程序在看到“.br”时中断句子,但现在

当它看到“.sp”和“.sp2”时,我正在尝试创建 1 个空行

打印两个空行然后继续文本。

while ( ( fscanf ( fp, "%60s", word)) == 1) {
    if ( strcmp ( word, ".br") == 0) { // break the text when you see .br
        printf ( "%s\n", line);
        line[0] = '[=10=]';
        out = 1;
    }

       if ( strcmp ( word, ".spn") == 0) { // insert n blank lines

    }

所以例如 "Hello my name is .sp2 Josh" 应该输出:

Hello my name is 


Josh

如果.sp和整数之间没有空格,如.sp4,则可以使用strncmp比较前三个字符,然后使用sscanf捕获整数。

if ( strncmp ( word, ".sp", 3) == 0) {
    if ( ( sscanf ( &word[3], "%d", &blanks)) == 1) {
        printf ( "%s\n", line);
        while ( blanks) {
            blanks--;
            printf ( "\n");
        }
        line[0] = '[=10=]';
        out = 1;
    }
    else {
        printf ( "%s\n", line);
        line[0] = '[=10=]';
        out = 1;
    }
}

您可以利用以下事实:fscanf 需要数字转换的格式在转换失败时不会推进文件指针。

因此,如果您遇到字符串 ".sp",请扫描下一个字符串以查找数字。如果失败,你有你的默认案例,一个空行。否则,您有要打印的空格数。

例如:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(void)
{
    FILE *fp = fopen("josh.txt", "r");
    char word[61];
    int wc = 0;

    if (fp == NULL) {
        fprintf(stderr, "Could not open 'josh.txt'.\n");
        exit(1);
    }

    while (fscanf(fp, "%60s", word) == 1) {
        if (strcmp (word, ".br") == 0) {
            putchar('\n');
            wc = 0;

            continue;
        }

        if (strcmp (word, ".sp") == 0) {
            int n;

            if (fscanf(fp, "%d", &n) < 1 || n < 0) n = 1;

            putchar('\n');
            while (n-- > 0) putchar('\n');
            wc = 0;

            continue;
        }

        if (wc++ > 0) putchar(' ');
        printf("%s", word);
    }

    putchar('\n');
    fclose(fp);

    return 0;
}