我对编程很陌生,特别是C。我试图隐藏/屏蔽密码作为练习。编写了这段代码,但我无法输入n
字符。
#include <stdlib.h>
#include <stdio.h>
int main(){
char pasword[10], ch;
int i;
while(i<=9 )
{
ch=getch();
if((ch >= 'a' && ch<='z') || (ch>='A' && ch<='Z'))
{
pasword[i] = ch;
i++;
printf("*");
}
}
pasword[i] = ' ';
printf("Password: %s", pasword);
return 0;
}
所以我尝试在不同的论坛上搜索,找到一段代码并将其添加到我的 if 语句中。
/* some code at the top */
}else if(ch == 13){
break;
}
它以某种方式使我允许输入n
或"输入"。
为什么ch
与13
相比?或者从这个意义上说,13
是什么?为什么当我13
更改为另一个号码时,我无法按 Enter 键?
我还可以补充一点,为什么我不能删除我输入的文本?
首先,这段代码有它自己的错误需要处理。
您需要将i
初始化为有效值,主要是0
。 然后,您的while
循环将保证被执行。
while(i <= 9)
此外,由于您要在上次使用的索引中添加' '
,因此循环最多应执行 9 次。因此,while(i <= 9)
应更改为while(i < 9)
,以便执行 9 次而不是 10 次。
现在,为了回答您的真正问题,13
(十六进制0x0D
)称为回车。请参阅此处的任何(正确的)ASCII 表,例如此表。
维基百科说,
回车符(有时称为墨盒回车,通常缩写为 CR 或回车)是一种控制字符或机制,用于将设备的位置重置为文本行的开头。它与换行和换行概念密切相关,尽管它本身可以单独考虑。
进一步参考,
在计算中,回车符是 ASCII 码、Unicode、EBCDIC 和许多其他代码中的控制字符之一。它命令打印机或其他输出系统(如系统控制台的显示器)将光标的位置移动到同一行上的第一个位置。它主要与换行 (LF) 一起使用,移动到下一行,以便它们一起开始一条新行。此序列可统称为 CRLF。
和
许多计算机程序单独或与换行符一起使用回车符来指示文本行的结束。
阅读最后引用的文本,您可能会想象为什么任何用户输入程序在用户按下 Enter 键后从scanf
继续。当它被视为"行尾"时,这是通常的情况。
那么当,
if((ch >= 'a' && ch<='z') || (ch>='A' && ch<='Z'))
{
}
else if(ch == 13) //This has allowed you to check if the user has pressed Enter on keyboard.
{
break;
}