c - 在 C 中读取密码时循环不会终止
问题描述
执行此代码时,输入回车键时循环不会终止。我试过使用 fflush(stdin);
#include<stdio.h>
#include<conio.h>
void main(){
char password[55];
printf("password:\n");
int p=0;
do{
password[p]=getch();
if(password[p]!='\n'){
printf("*");
}
p++;
}while(password[p-1]!='\n');
fflush(stdin);
password[p-1]='\0';
printf("\n");
getch();
}
解决方案
欢迎来到 Windows。
其中 end-of-line 是\r\n
而不是\n
,所以你getch()
会给你\r
(0x0d) 而不是\n
(0x0a) 作为行尾。
替换!= '\n'
为!= '\r'
,您将拥有一个可以在 Windows 上按预期工作的程序。#include <conio.h>
(无论如何你都必须遵守。)
请注意,这fflush( stdin );
是该语言的 Microsoft 扩展,同样不可移植。(语言标准考虑fflush()
了输入流未定义的行为。)
它是int main( void )
或int main( int argc, char * argv[] )
。void main()
不合法 C.
推荐阅读
- java - 当用户单击单选按钮时,JVM 会生成哪种事件类型?它是一个动作事件还是一个项目事件?
- python - 基于python中条件的多色时间序列线图使用线集合
- python - 无法分配“'value'”:“model.attr”必须是“model”实例
- .htaccess - 根目录有什么方法可以通过htaccess没有favicon而是子文件夹?
- c - 合并排序中的递归不增长:
- c# - 将 KeyCodes 设置为等于 OVRInput 按钮?
- sql-server - exec 存储过程是同步的吗?
- php - Codeigniter 4 验证总是使用 getJSON 返回 false
- git - Git推送速度波动和缓慢-如何加快?
- angular - Angular Observable 组件和服务交互