我正在阅读带有fscanf()
功能的多行文件。我想忽略换行符,但不能忽略文件中可能存在的其他空白字符。我怎样才能做到最好?
答案 0 :(得分:0)
我认为这符合你的要求:
char ch[2];
while (fscanf(fp, "%1[^\n]%*[\n]", ch) == 1)
putchar(ch[0]);
第一个格式说明符最多读取一个不是换行符的字符并将其存储在字符串ch
中,第二个说明符读取换行符但禁止赋值。此循环的结果是打印文件中的所有字符,跳过换行符,直到EOF
。
fscanf()
,同时禁止分配读取换行符。改进的代码是:
char ch[2];
fscanf(fp, "%*[\n]");
while (fscanf(fp, "%1[^\n]%*[\n]", ch) == 1)
putchar(ch[0]);
答案 1 :(得分:0)
如果您只想忽略换行符,则使用getc()
比使用fscanf()
更简单,更有效:
void copy_ignoring_newline(FILE *fin, FILE *fout) {
int c;
while ((c = getc(fin)) != EOF) {
if (c != '\n')
putc(c, fout);
}
}
您可以针对要对文件内容执行的任何处理调整此选项。
fscanf()
是一个非常笨重的解析文件的接口,除了%c
和%[
转换说明符之外,它还将空格,换行符和其他空白字符视为相同。使用getc()
,fgets()
或fread()
的替代方法似乎更适合您的需求。