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

时间:2015-11-10 13:04:30

标签: c formatting user-input

我创建了一个程序,用于读取用户输入的文件和

文件中的

包含格式化功能,例如.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] = '\0';
        out = 1;
    }

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

    }

所以例如“Hello我的名字是.sp2 Josh”应输出:

Hello my name is 


Josh

2 个答案:

答案 0 :(得分:3)

如果.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] = '\0';
        out = 1;
    }
    else {
        printf ( "%s\n", line);
        line[0] = '\0';
        out = 1;
    }
}

答案 1 :(得分: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;
}