\n 和 \r 与 键盘回车键的问题 求教
本帖最后由 tyf19938 于 2013-01-17 15:44:56 编辑 \n \r 区别 联系 键盘键入回车键 代表的是什么字符?
//功能 输入密码以*显示 并支持退格
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define MAX 100
int main(void)
{
char passwords[MAX+1], ch;
int i=0;
puts("Input the passwords:");
while((ch = getch()) != '\r' && i < MAX)//为什么\r换为\n后击回车键就不对呢?
{
if (ch == '\b')
{
if (i > 0)
{
passwords[--i]=NULL;
printf("\b \b");
}
else
putchar(7); //bell
}
else
{
passwords[i++] = ch;
printf("*");
}
}
passwords[i] = '\0';
printf("\nYour passwords is: ");
puts(passwords);
system("pause");
return 0;
}
//再看这个
#include<stdio.h>
int main()
{
char ch;
ch=getchar();
while(ch!='\n')//这个可以,换为\r 后循环不会结束
{
putchar(ch);
ch=getchar();
}
return 0;
}
如果第一个和第二个 的同一部分都换为 '\n'
为什么 第二个可以达到预想效果 而第一个不可以呢 c 回车?换行
[解决办法]
输入回车键:
1、Linux系统产生的是\n;
2、Mac系统产生的是\r;
3、Windows系统产生的是\r\n。
[解决办法]
windows下回车是\r\n getch是读取一个字符立即返回,而windows下回车是两个字符,所以getch只读取了\r, getchar是读取缓冲区的字符,而且用户输入回车的时候,就会把用户输入的字符全部放到缓冲区中,但不包括回车(\r\n)字符,并且会自动在缓冲区后加上\n,来代表结束。 所以你第二个可以,而第一个不可以,就是因为你一个用了getch另一个用了getchar
[解决办法]
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
最保险的办法还是自己写一小段测试程序实际运行看结果。
[解决办法]
getch 返回按键码,回车对应的CR,即'\r',CTRl + 回车对应LF,即'\n'.
getchar 返回的是输入缓冲中的字符,换行字符为'\n'
所以同样是回车,返回的ascii不同。