回车到底怎么回事

wayne92 2006-03-27 11:09:02
在开复论坛上面看到由人问这个问题,我也不是很清楚.请高手指教!

我C编程时发现,回车有玄妙之处。

用getch()接收回车键,收到的是' \r ';

用getchar()接收回车键,收到的却是 ' \n '

我听说回车键包含了 ' \n ' 和 ' \r '

又知道getchar()输入的字符要通过回车才送入内存,

这么说用getchar()接收回车时,回车键是“一键双叼”,既作字符输入,又送内存

这样一来我就越来越糊涂了

搞不懂 ' \r ' 和 ' \n ' 是怎么来的
...全文
407 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lei001 2006-03-28
  • 打赏
  • 举报
回复
感觉上,\n=\n+\r
Rick_ang 2006-03-28
  • 打赏
  • 举报
回复
在汇编里就明白了,回车是包括两个操作, 分别输出0Ah,0Dh,回车与换行,回车是把光标移动到行首,换行是把光标移到下一行
hustcslhb 2006-03-28
  • 打赏
  • 举报
回复
我觉得这两个函数返回的编码都不一样
一个是键盘扫描码,一个是得到的ASCII编码
不过楼上的说的,汇编中“0A0D”,回车,换行确实是有区别的,这也没错
mp6 2006-03-28
  • 打赏
  • 举报
回复
mark
jixingzhong 2006-03-28
  • 打赏
  • 举报
回复
回车 ....换行 ...回车换行....

注意一下就可以了 ~

一般的回车都是说的回车换行,
但是这个还是有区别的 ....

知道一下就可以了。
yinqing_yx 2006-03-28
  • 打赏
  • 举报
回复
多谢 学习了~~~~~~~
popy007 2006-03-28
  • 打赏
  • 举报
回复
在非unix的系统中,比如msdos,\n会被系统自动转换成\n\r,

而unix等操作系统不会这么做。
逸学堂 2006-03-28
  • 打赏
  • 举报
回复
\n\r在可以转换为\n
Wolf0403 2006-03-28
  • 打赏
  • 举报
回复
文本输入应该使用面向 ascii 流的操作函数,包括 printf / scanf,fgets / fputs 和 fgetc 等等。这些操作函数会自动处理从 '\r\n' 到 '\n' 的转换。

getch 不是一个面向文本流的操作函数。getch 是面向终端的,无缓冲操作。Win32 系统它在 conio.h,Unix 系统中它在 curses 库中。不应该使用它来处理文本流。
jinjiajie 2006-03-28
  • 打赏
  • 举报
回复
...记得是在WINDOWS下是2个符号,LINUX下就只有一个0AH了
gongzilv 2006-03-28
  • 打赏
  • 举报
回复
惭愧 思维有点狭隘。
chencyy1 2006-03-28
  • 打赏
  • 举报
回复
晕!我的天啊!好复杂!
wuchangqian 2006-03-28
  • 打赏
  • 举报
回复
回答一个C语言--回车是什么的问题!
回答你这个问题首先得从定义上讲起!因为回车本身只是一个定义的键名。换句话说就象你的名字。你要知道的不是他是什么东西。而是在什么环境下代表什么意思。从电子学的角度讲就是它产生了有别于其他键的数字信号!至于信号本身它到底是 多少(是0001111还是111000)那是无关紧要的。而从编译的角度讲它产生什么样的机器代码?是由编译系统+芯片的指令说了算的。这个东西在电路的级别上理解就是:我遇到回车产生的信号触发了什么?下一步该做什么?学过数字电路的人都知道,逻辑上的驱动和可控制的输入共同决定你想要的结果!回到问题本身。你的操作并不是你所见的操作。通过几层的透明处理,事实上你想得到的是什么自己都很模糊!而你问的却是为什么得出不同的结果!换句话说。你的操作就象你叫令外一个人去收集一个人的资料。至于你叫什么人去收集。你想知道被收集人的什么资料你自己也不清楚!C语言本身是一个抽象的集合。它抽象问题>抽象事物(当然他们可以有机统一,我在这里所说的是我们大家通俗的理解)所以它面象过程。学习C的时候你不是一味要知道它抽象出来的结果是什么,而是要明白它抽象的方法。就象一个数学函数你要知道的不能只是函数值而是函数本身。它是怎么将一个数映射为另一个数。就象你问题中所叙述:
用getch()接收回车键,收到的是' \r ';

用getchar()接收回车键,收到的却是 ' \n '

而你听说回车键包含了 ' \n ' 和 ' \r '
可是当我问你getch()和getchar()是什么?你会怎么回答我?简单的说它们是一个函数或者说是一个操作。甚至你可以说它们是机器在运行过程中处理数据的一个小系列(因为它们的机器码相对来说是比较短的)。当然这是我期待的回答。如果说你的回答是:这是我实现某个目的的一个工具。那也可以。不过在C语言区我很失望听到这个---为什么你会知道的。而且在你不是很明白你的目的的时候不要问两者的区别到底是为什么!
C语言是一种语言。getchar()~~;和getch()~~~;是函数。严格说是一个操作序列!就是我所比方的你托的那个人做的收集的操作。而回车是你想知道的那个人。而你想知道它什么你没跟给你拜托的人getchar()和getch()讲清楚。(事实上也讲不清楚--因为即使你将清楚了他们也会很任性地给你他们想知道的——而不是你想知道的)。那么到现在就可以把你的问题转化为getchar()和getch()他们究竟进行了什么操作———在C中知道它进行了什么操作比知道它得到什么结果更重要——因为它面象过程。关于这两个问题我可以在接下去的时间讲的很清楚。可是我讲了,楼主和诸位捧楼主的兄弟姐妹未必认为是对的或者说在这放面MSDN比我要有权威。但是有一点必须指出。各位在此留下芳名的弟兄。为何没能把C中的抽象讲出来。换句话说为何没把解决问题的步骤讲出来?因为笔者小人区区在下我始终坚持C 的“四项基本原则”1;坚持抽象简单化。2;坚持问题步骤化。3;坚持程序程序化。4;坚持不住就退化。也就是说在回答楼主的时候,为什么不告诉他C语言的精髓就是一步一步来然后过程话呢?如果有人直接说出这两个函数的功能那说明他学到了C 的语法和用法。如果有人说出他们是怎么通过编译然后在什么机器上是怎么实现的。它们在操作系统的调控下怎么把数字通过人机对话接口放映出来。说明他学到了除C语言之外的相关计算机技术的知识。如果有人可以把楼主的问题分成一个个较之较小较简单的问题然后引导许多人来处理他得出的“二级问题”那他可以是一个合格的架构师。我欢迎他来微软应聘架构师。如果有人写一个很完整的正确的程序向楼主展现问题那我也欢迎他来微软来应聘程序员。如果有人说:我们来共同学习。那他应该得到我们大家共同的关注和灌注。如果有人说MSDN上有那他肯定是路过的要不就是无聊的小程序员在打发上班煎熬着的时间——我如果知道怎么联系他的主管————我建议他应该被***。如果有人打几个很酷的M A R K字母那我可以知道他学过几天英语。如果有人长篇大论而且论的东西虽然不是入木三分但也不乏颇有见地。那我不会认为他很空。相反我会觉得。中国软件业的新时代将要到来!因为那种山雨欲来风满楼,那种巨人将要诞生的力量。会在近乎狂妄却言之在理的字里行间隐隐约约。闪闪烁烁。
wi1son 2006-03-27
  • 打赏
  • 举报
回复

\n 代表:换行,将当前位置移到下一行的开头
\r 代表:回车(但不换行),将当前位置移到本行开头,即返回到本行最左端(第1列)
yinqing_yx 2006-03-27
  • 打赏
  • 举报
回复
// crt_getch.c
// compile with: /c
/* This program reads characters from
* the keyboard until it receives a 'Y' or 'y'.
*/

#include <conio.h>
#include <ctype.h>

int main( void )
{
int ch;

_cputs( "Type 'Y' when finished typing keys: " );
do
{
ch = _getch();
ch = toupper( ch );
} while( ch != 'Y' );

_putch( ch );
_putch( '\r' ); /* Carriage return */ 回车
_putch( '\n' ); /* Line feed */ 换行
}
MSDN上的诠释程序,上面可以看出一点眉目,我对这个也不是很清楚,共同学习~~~~

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧