我是编程的新手,特别是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] = '\0';
printf("Password: %s", pasword);
return 0;
}
所以我尝试搜索不同的论坛,找到一段代码并将其添加到我的if语句中。
/* some code at the top */
}else if(ch == 13){
break;
}
它以某种方式让我允许输入\n
或'输入'。
为什么ch
与13
进行比较?或者在这个意义上什么是13
?为什么当我将13
更改为另一个号码时,我无法按Enter键?
我还要补充一点,为什么我不能删除我输入的文字?
答案 0 :(得分:2)
首先,这段代码有自己的错误需要处理。
您需要将i
初始化为有效值,主要是0
。
然后,您的while
循环将被保证执行。
while(i <= 9)
此外,由于您在最后使用的索引中添加了'\0'
,因此您的循环应该最多执行9次。因此,while(i <= 9)
应更改为while(i < 9)
,以便执行9次而不是10次。
现在,为了回答您的真实问题,13
(十六进制中的0x0D
)称为回车。请参考任何(正确的)ASCII表,例如this one here。
维基百科说,
回车,有时称为墨盒返回并且通常缩短为CR或返回,是用于将设备的位置重置为文本行开头的控制字符或机制。它与换行符和换行符概念密切相关,尽管它本身可以单独考虑。
进一步参考,
在计算中,回车是ASCII码,Unicode,EBCDIC和许多其他代码中的控制字符之一。它命令打印机或其他输出系统(例如系统控制台的显示器)将光标的位置移动到同一行上的第一个位置。它主要与换行(LF)一起使用,移动到下一行,因此它们一起开始一条新线。这个序列可以统称为CRLF。
和
许多计算机程序单独使用回车符或使用换行符来表示一行文本的结尾。
在上一篇引用文本中,您可以想象为什么用户按下ENTER键后,任何用户输入程序都从scanf
开始。这是通常的情况,当它被视为行尾&#39;
所以,何时,
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;
}