如何在文本文件中插入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;
}
我创建了一个程序来读取用户输入的文件并且
文件内部包含格式化功能,例如 .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;
}