避免在文件末尾添加新行
Avoiding adding a new line at the end of file
给定从标准输入读取的代码
int main() {
int c;
while ((c = getchar()) != EOF) {
fprintf(stdout, "%c", c);
}
}
此代码适用于读取包含多行的 stdin
中的所有内容。但它会在文件末尾添加一个新行。我如何修改上面的代码,以防止在 stdin
的最后一行添加额外的新行 \n
? stdin
的例子如下。
hello world!!!
how is going today?
this is the last line in stdin
正如@NateEldredge 以友好的方式所说,从最后一行中删除尾随 '\n'
是愚蠢的。按照惯例,在类 UNIX 系统上,文本文件中的每一行都必须以 '\n'
结尾。但是如果你真的想删除最后一个换行符,也许是为了与一些较小的 OS 兼容,你必须延迟打印字符,直到你知道下一个读取是否返回 EOF
,或者不:
#include <stdio.h>
int main(void)
{
int c = getchar();
int peek_c;
if (c != EOF)
{
/* Print out everything except the last char */
while ((peek_c = getchar()) != EOF)
{
fprintf(stdout, "%c", c);
c = peek_c;
}
/* If the last char was not '\n', we print it
(We only want to strip the last char if it is a newline) */
if (c != '\n')
fprintf(stdout, "%c", c);
}
}
给定从标准输入读取的代码
int main() {
int c;
while ((c = getchar()) != EOF) {
fprintf(stdout, "%c", c);
}
}
此代码适用于读取包含多行的 stdin
中的所有内容。但它会在文件末尾添加一个新行。我如何修改上面的代码,以防止在 stdin
的最后一行添加额外的新行 \n
? stdin
的例子如下。
hello world!!!
how is going today?
this is the last line in stdin
正如@NateEldredge 以友好的方式所说,从最后一行中删除尾随 '\n'
是愚蠢的。按照惯例,在类 UNIX 系统上,文本文件中的每一行都必须以 '\n'
结尾。但是如果你真的想删除最后一个换行符,也许是为了与一些较小的 OS 兼容,你必须延迟打印字符,直到你知道下一个读取是否返回 EOF
,或者不:
#include <stdio.h>
int main(void)
{
int c = getchar();
int peek_c;
if (c != EOF)
{
/* Print out everything except the last char */
while ((peek_c = getchar()) != EOF)
{
fprintf(stdout, "%c", c);
c = peek_c;
}
/* If the last char was not '\n', we print it
(We only want to strip the last char if it is a newline) */
if (c != '\n')
fprintf(stdout, "%c", c);
}
}