【问题标题】:Is the new line character part of the same line as the previous character新行字符是否与前一个字符在同一行
【发布时间】:2026-01-16 08:20:07
【问题描述】:

我为什么要问?

我被赋予了重新实现文本框 GUI 小部件和类型编写器的艰巨任务,所以这就是这个问题的由来。


我目前的做法

目前在我的项目中,新行字符\n 保存了下一行(column1,line+1)最终第一个字符的位置坐标。但是,这恐怕不是对换行位置的标准理解。


问题

新行字符\n 是否与前一个字符在同一行,它是下一行的一部分(就像我目前的方法一样)还是两者都不是?


有区别吗?

我在用退格键擦除新行时遇到了并发症,因为我必须为此事件实施特定条件,但我试图避免这种情况(或者可以通过改变我处理新行的方式来避免这种情况字符),因为从所有这些情况来看,我似乎正在尝试发明人工智能或其他东西。

【问题讨论】:

  • @naxa 是的,它将使用 GPL 许可证开源发布。
  • 它建立在一个平台上,该平台只允许基本的绘图功能(putpixel、lineto 和 setpen)以及访问键盘和鼠标。该平台不支持 2D(或 3D)硬件加速(因为它基于 SDL1),但它被设计为经过大量优化,并且在自动输入(自动文本框填充)时支持 166 fps。它可以移植以与 CAIRO 一起使用(例如),因为它只使用我所说的最基本的交互。
  • 尽管有这些限制和大量优化,但它在功能和适应性方面超出了标准文本框(来自 .NET env 甚至 GNOME)。 (数字滚动、分层 pixbuff 等 - 已确认)
  • 嘿,听起来令人印象深刻!如果您可以在存储库公开时将其超链接到此处,那就太好了。
  • 这确实令人印象深刻,但我一般开始使用它是因为没有全功能的文本框编码在平台上工作。因此,我不明白为什么有人会更喜欢使用这些(尽管功能强大、xplatform、可定制),而是使用标准的 GNOME 文本框。我同意它们有一些缺点(例如幻影选择),但它们并不那么重要(至少对于常用)

标签: c user-interface textbox position newline


【解决方案1】:

general中,换行符\n当前行的一部分,当解释时,会发出一个可视化的表示行尾并移动下一个字符(向前)以在下一行打印。

【讨论】:

  • 谢谢。我会记住这一点。在做我所做的事情时,了解这一点非常重要。很好,你理解了这个问题。
【解决方案2】:

7.21.2 Streams “文本流是一个有序的字符序列组成的行,每行由零个或多个字符加上一个终止换行符。最后一行是否需要一个终止换行符是实现定义的。..."

此规范可能最符合 OP 的问题。换行符是它之前的行的一部分。


详细说明'\n' 某些方面的其他 C 参考资料。

对于源代码文件,换行始终被视为终止行尾

5.1.1.2 翻译阶段:“...(为行尾指示引入换行符)...”

6.4.9 评论:“... 字符 // ... 并找到 终止 换行符。”

6.10.3 宏替换:“...直到终止 #define 预处理指令的换行符。...”

6.10 预处理指令:“换行符结束预处理指令...”

6.10.4 行控制:“当前源行的行号比读取的换行字符数大一...”

C 程序如何处理'\n' 被指定为

7.4.1.10 isspace 函数:“……标准空白字符是……换行符 ('\n')……”

5.2.2 字符显示语义“\n(新行)将活动位置移动到下一行的初始位置。”

--

计算行数

unsigned long long file_line_count(FILE *inf) {
  unsigned long long line_count = 0;
  int ch;
  int previous = '\n'; 
  while((ch = fgetc(inf)) != EOF) {
    if(previous == '\n') {
      line_count++;
    }
    previous = ch;
  }
  return line_count;
}

【讨论】:

最近更新 更多