如何在 c 中以换行符结束文件?[已结束]

How to end a file in a newline in c? [closed]

提问人:sauce 提问时间:9/17/2023 更新时间:9/17/2023 访问量:52

问:


编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将有助于其他人回答这个问题。

2个月前关闭。

    printf("\n");
    return 0;
}
#endif

大家好,

这些是我代码的最后几行,这是你在 C 中用换行符结束文件的方式吗?或者,当他们说您应该始终以换行符结束文件时,他们的意思是其他含义吗?

当我尝试在endif下放置换行符时,它给了我一个错误,所以我只能把它放在那里,还是我不应该打印换行符?我应该根据我的学校用换行符提交它,但我不确定这是否正确。

C 文件 换行符

评论

3赞 GSerg 9/17/2023
您是在程序生成的数据文件中使用换行符,还是在显示的源代码文件中使用换行符?
0赞 sauce 9/17/2023
上次我交的时候,他这样看了我的代码,没有看到换行符,他们只说它应该以换行符结尾,而不是怎么做,我在网上查了一下,似乎有一个一般规则,你应该这样做,但我不知道如何应用它。
0赞 Weather Vane 9/17/2023
也许您应该始终以换行符结束多行文本文件,但同样,您永远不应该假设您正在阅读的文本文件以换行符结尾。
1赞 GSerg 9/17/2023
所以它是关于代码文件中的尾随换行符。您意识到您已经在该文件中放置了相当多的换行符?后有一,后有一,后有。所以你应该熟悉把换行符放在那里;因此,在你对所有其他行所做的事情之后,做一个换行符。printf("\n");return 0;}#endif
1赞 Charles Duffy 9/17/2023
您正在使用为 Windows 制作的工具(如 VS Code),不是吗?在 Windows 上,换行符分隔行(因此它们位于行之间,但不希望在文件末尾有一个换行符);但在 UNIX 上,换行符终止行(因此,除非行的末尾有换行符,否则行无效)。

答:

2赞 Clifford 9/17/2023 #1

该片段以 (from ) 结尾。该文件应以空行结尾:f#endif

    printf("\n");
    return 0;
}
#endif

问题(理论上)是任何文件都可以是 'd,所以例如,如果你有一个以 xx.h 结尾的标头,并说一个 yy.h 开始 ,代码:#include#endif#if

#include“xx.h” #include“yy.h”

包含后的预处理器将看到:

#endif#if

都在一条线上,会失败。当然,还有许多其他语法废话可以通过这种方式生成。通常你会侥幸逃脱,因为任何类型的大多数源文件都是以样板注释开头的,这通常是语义和句法上良性的。在现代编译器上,您通常会收到格式错误的源的诊断警告。

在 C++ 中,编译器需要表现得好像有换行符一样,即使它没有显式以避免此问题。这可能也在后来的 C 标准中(我没有看过),或者我猜编译器可能会选择在任何情况下隐式添加它并发出警告。

评论

0赞 Charles Duffy 9/17/2023
如果将文件另存为正确的 UNIX 文本文件,则不需要显式空行(就像在 UNIX 上一样,换行符终止行,并且在每行之后都是必需的,而不是分隔行并且仅在它们之间需要)。只有面向 Windows 的工具需要添加额外/空行才能具有终止换行符。
0赞 Charles Duffy 9/17/2023
它避免的问题远不止这个问题:例如,UNIX shell 中的循环将忽略任何没有尾随换行符的行。这是黑字POSIX规范,而不仅仅是约定:参见 pubs.opengroup.org/onlinepubs/9699919799/basedefs/...pubs.opengroup.org/onlinepubs/9699919799/basedefs/...while read
0赞 Charles Duffy 9/17/2023
绝对有执法。开放组是决定您的操作系统是否经过 UNIX 认证并能够使用商标的人。
0赞 Charles Duffy 9/17/2023
你告诉人们制作 git 会标记警告的文件(就像文件末尾的空行和行尾的空格一样)作为错误配置的解决方法,首先可以通过始终如一地为您的目标平台使用正确的编辑器配置来避免这些错误配置(以及为同一平台构建的 C 预处理器);这是站不住脚的,我会不断纠正那些听从你的“建议”的同事提交的文件(或者,更确切地说:我会调整我们的 CI 以拒绝这些文件,这样他们就永远不会进入共享分支)。