2017-01-14 13 views
0

Существует много примеров кода для программы паролей, которая скрывает вход со звездочкой. Эти программы работают, когда я компилирую их с помощью IDE CodeBlocks, выводя * каждый раз, когда я печатаю букву.Как отобразить звездочку для ввода пароля в C++ с использованием CLion

Enter Password : ****** 
You entered : iiiiii 
Process returned 0 (0x0) execution time : 6.860 s 
Press any key to continue. 

Однако, когда я использую CLion IDE, я могу увидеть буквы I тип:

Enter Password :iiiiii 
****** 
You entered : iiiiii 
Process finished with exit code 0 

Может кто-то объяснить, почему эта разница существует между этими двумя Иды?

код, который я использую (я нашел его в Интернете) является:

#include <iostream> 
#include <conio.h> 
#include <stdlib.h> 
using namespace std; //needed for cout and etc 

int main() 
{ 
    START: 
    system("cls"); 
    cout<<"\nEnter Password : "; 
    char pass[32];//to store password. 
    int i = 0; 
    char a;//a Temp char 
    for(i=0;;)//infinite loop 
    { 
     a=getch();//stores char typed in a 
     if((a>='a'&&a<='z')||(a>='A'&&a<='Z')||(a>='0'&&a<='9')) 
      //check if a is numeric or alphabet 
     { 
      pass[i]=a;//stores a in pass 
      ++i; 
      cout<<"*"; 
     } 
     if(a=='\b'&&i>=1)//if user typed backspace 
      //i should be greater than 1. 
     { 
      cout<<"\b \b";//rub the character behind the cursor. 
      --i; 
     } 
     if(a=='\r')//if enter is pressed 
     { 
      pass[i]='\0';//null means end of string. 
      break;//break the loop 
     } 
    } 
    cout<<"\nYou entered : "<<pass; 
    //here we can even check for minimum digits needed 
    if(i<=5) 
    { 
     cout<<"\nMinimum 6 digits needed.\nEnter Again"; 
     getch();//It was not pausing :p 
     goto START; 
    } 
    return 0; 
} 
//Lets check for errors. 
//You can even put file system. 

Я знаю, что есть много вопросов, подобных этому, однако, ни один из них не может объяснить, почему это не так работающих при использовании среды CLION.

+2

Вы должны использовать что-то вроде [ncurse] (https://en.wikipedia.org/wiki/Ncurses) –

+0

Я на самом деле не используется ncurse, @EdHeal, так как бы Я делаю программу с ncurse? –

ответ

1

Может

#include <conio.h> 

int main() 
{ 
    char s[10] = { 0 }; 
    int i; 
    for (i = 0; i < 10;i++) { 
     s[i] = _getch(); _putch('*'); 
     if (s[i] == 13) break; 
    }; 
    printf("\nYour pass is %s", s); 
    getchar(); 
    return 0; 
} 
+1

'', '_getch()' и '_putch()' - не переносные объекты, найденные только в компиляторах MS-DOS. –

+1

@MikeKinghan Они также поддерживаются компиляторами Windows, такими как Visual C++ и MinGW. –

 Смежные вопросы

  • Нет связанных вопросов^_^