这段代码是如何工作的?
how it works this code?
我没看懂这个功能。有人可以向我解释完整的代码吗? *(pass+i) = temp_passP[i];
这一行是什么意思?
还有这是什么意思 printf \a printf \b
?
void get_password(char* pass)
{
char temp_passP[25];
int i=0;
while(1)
{
temp_passP[i]=getch();
if(temp_passP[i]==13){break;}
else if(temp_passP[i]==8)
{
if(i!=0) {
printf("\b \b");
i--;
} else {printf("\a");}
}
else
{
printf("*");
*(pass+i) = temp_passP[i];
i++;
}
*(pass+i)='[=10=]'; what it means ?
}
}
*(pass+i)
等价于 pass[i]
。你必须了解指针。 '\b'
表示向后space,它将光标向左移动。 '\a'
表示警报,它会发出蜂鸣声或铃声。
8 等于 '\b'
。 temp_passP[i]==8
表示 'When the user pressed backspace key'。它将光标向左移动,打印 space,并且由于光标向右移动,它再次将光标向左移动。
当用户按下其他键时,它打印'*'
并将输入复制到pass[i]
。
简而言之,该程序在用户按下回车键之前获取输入并将其复制到 pass
。
这个功能首先要了解的是它不是很好。 char temp_passP[25]
应该只是 int ch
,那么所有对 char temp_passP[i]
的引用都可以是 ch
。通过这一更改,可能更容易看出代码只是通过 getch() 从 stdin 读取字符,一次一个字符,并检查每个字符。
首先,它将字符与 13 进行比较,这是 Carriage Return 的 ASCII 码。在某些系统上,当用户键入 ENTER 时,系统会将 Carriage Return 和 Line Feed 这两个字符放入 stdin 流中。所以这个检查正在寻找结束线。 (在其他环境中,ENTER 仅生成换行符 (ASCII 10),因此此代码在那里不起作用。)
函数然后将字符与 8 进行比较,这是 Backspace 的 ASCII 代码。该代码正在检查用户是否正在删除输入的最后一个字符。如果是这样,它会将指针备份到 pass
缓冲区并打印 "\b \b"
序列,该序列从屏幕上擦除该字符的星号。如果 pass
缓冲区中没有字符,要么是因为 none 已经输入,要么是所有字符都已用 Backspace 删除,则 "\a"
旨在使铃声响起。
如果字符没有什么特别之处,则用*(pass+i) = temp_passP[i];
(或*(pass+i) = ch;
)写入pass
缓冲区。
*(pass+i) = '[=21=]';
命令确保 pass
缓冲区在最后一个未被删除的字符之后始终以 null 终止。
我没看懂这个功能。有人可以向我解释完整的代码吗? *(pass+i) = temp_passP[i];
这一行是什么意思?
还有这是什么意思 printf \a printf \b
?
void get_password(char* pass)
{
char temp_passP[25];
int i=0;
while(1)
{
temp_passP[i]=getch();
if(temp_passP[i]==13){break;}
else if(temp_passP[i]==8)
{
if(i!=0) {
printf("\b \b");
i--;
} else {printf("\a");}
}
else
{
printf("*");
*(pass+i) = temp_passP[i];
i++;
}
*(pass+i)='[=10=]'; what it means ?
}
}
*(pass+i)
等价于 pass[i]
。你必须了解指针。 '\b'
表示向后space,它将光标向左移动。 '\a'
表示警报,它会发出蜂鸣声或铃声。
8 等于 '\b'
。 temp_passP[i]==8
表示 'When the user pressed backspace key'。它将光标向左移动,打印 space,并且由于光标向右移动,它再次将光标向左移动。
当用户按下其他键时,它打印'*'
并将输入复制到pass[i]
。
简而言之,该程序在用户按下回车键之前获取输入并将其复制到 pass
。
这个功能首先要了解的是它不是很好。 char temp_passP[25]
应该只是 int ch
,那么所有对 char temp_passP[i]
的引用都可以是 ch
。通过这一更改,可能更容易看出代码只是通过 getch() 从 stdin 读取字符,一次一个字符,并检查每个字符。
首先,它将字符与 13 进行比较,这是 Carriage Return 的 ASCII 码。在某些系统上,当用户键入 ENTER 时,系统会将 Carriage Return 和 Line Feed 这两个字符放入 stdin 流中。所以这个检查正在寻找结束线。 (在其他环境中,ENTER 仅生成换行符 (ASCII 10),因此此代码在那里不起作用。)
函数然后将字符与 8 进行比较,这是 Backspace 的 ASCII 代码。该代码正在检查用户是否正在删除输入的最后一个字符。如果是这样,它会将指针备份到 pass
缓冲区并打印 "\b \b"
序列,该序列从屏幕上擦除该字符的星号。如果 pass
缓冲区中没有字符,要么是因为 none 已经输入,要么是所有字符都已用 Backspace 删除,则 "\a"
旨在使铃声响起。
如果字符没有什么特别之处,则用*(pass+i) = temp_passP[i];
(或*(pass+i) = ch;
)写入pass
缓冲区。
*(pass+i) = '[=21=]';
命令确保 pass
缓冲区在最后一个未被删除的字符之后始终以 null 终止。