我想知道在阅读文件时是否可以忽略新行。我写了一个小程序,它从文件中读取字符并对它们进行格式化,但是文档中的新行会弄乱格式化,最后我会得到双倍空格,我只需要一个间距。
是否可以禁用此功能?所以我的程序打印出的唯一新行是我在程序中插入打印函数的新行?
答案 0 :(得分:3)
C并不提供方便性,您必须自己提供或使用第三方库,例如GLib。如果您是C的新手,请习惯它。您正在非常接近裸 metal 芯片。
通常你会逐行读取一个文件fgets()
或我的偏好POSIX getline(),并通过查看最后一个索引并将其替换为空来删除最终换行符(如果它是&#39) ;换行。
#include <string.h>
#include <stdio.h>
char *line = NULL;
size_t line_capacity = 0; /* getline() will allocate line memory */
while( getline( &line, &line_capacity, fp ) > 0 ) {
size_t last_idx = strlen(line) - 1;
if( line[last_idx] == '\n' ) {
line[last_idx] = '\0';
}
/* No double newline */
puts(line);
}
为方便起见,您可以将其放入一个小功能中。在许多语言中,它被称为chomp
。
#include <stdbool.h>
#include <string.h>
bool chomp( char *str ) {
size_t len = strlen(str);
/* Empty string */
if( len == 0 ) {
return false;
}
size_t last_idx = len - 1;
if( str[last_idx] == '\n' ) {
srt[last_idx] = '\0';
return true;
}
else {
return false;
}
}
您自己实施fgets
和getline
以了解文件中的阅读行是如何实际运作的,这对您有所帮助。