首页 > 解决方案 > 在 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();
}

标签: c

解决方案


欢迎来到 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.


推荐阅读