PDA

View Full Version : گرفتن پسورد از ورودی



mohamnt
دوشنبه 03 خرداد 1389, 10:43 صبح
برای اینکه ورودی ما که به عنوان پسورد داره وارد میشه بجای نمایش حروف * نمایش داده بشه باید چیکار کرد :-b

saber187518
دوشنبه 03 خرداد 1389, 12:54 عصر
دوست عزیز شما وقتی میخوای پسورد رو بخونی اولا که باید کاراکتر به کاراکتر بخونی.
خوندن هر کاراکتر رو با getch انجام بدی و بعد از هر getch یک * رو چاپ کنی.
و این کار رو تا زمانی انجام بدی که کاربر enter میزنه.
اگه کد خواستی بگو بذارم.
موفق باشی

mohamnt
دوشنبه 03 خرداد 1389, 23:41 عصر
اگه مقدوره کد بزارین
یه سوال ؛
از کجا میشه تغییراتی که توی بعضی تابع ها در لینوکس و ویندوز هست رو پیدا کرد
گمونم این getch موقع اجرا در لینوکی خطا ازش می گرفت :-/

saber187518
دوشنبه 03 خرداد 1389, 23:58 عصر
در مورد لینوکس شما درست میگین .
لینوکس تابع getch رو نمیشناسه ، و البته این به خاطر اینه که اصولا هدر فایل conio رو نمیشناسه.
ولی در هر صورت کد برنامه ای که عرض کردم خدمتتون به این صورت هست.


#include <iostream.h>
#include <conio.h>
void main()
{
char st[10],ch;
int i=0,j;
ch=getch();
while(ch!=13)
{
putch('*');
st[i]=ch;
ch=getch();
i++;
}
cout <<"\n";
for (j=0;j<i;j++)
cout <<st[j];
getch();
}

البته این نمونه کد هست که شما هر طور بخواید میتونید تغییر حاصل کنید.
باز هم اگه سوالی باشه در خدمتم.
موفق باشی.

mohamnt
سه شنبه 04 خرداد 1389, 04:08 صبح
ما چون سه نفریم که داریم روی یه پروژه کار می کنیم و دو تای دیگه از دوستام دارن تو لینوکس این کارو می کنن قسمت کد کردن فایل خروجی و پسورد رو من دارم روش کار می کنم حالا معادلی برای getch وجود نداره ؟
( یااصلا جایی هست که بشه همین این معادل ها رو پیدا کرد و شناخت ؟ )

saber187518
چهارشنبه 05 خرداد 1389, 02:13 صبح
با سلام
دوست عزیز من برنامه نویسی c++ محیط لینوکس زیاد کار نکردم. و نمیدونم که تابعی به جای getch هست یا نه.
اما فکر کنم به جای برنامه که گذاشتم توی لینوکس شما بهتره که به محض فشرده شدن کلید و خوانده شدن کاراکتر ورودی توسط برنامه ، سطر جاری را قبل از اینکه کاربر بتواند ببیند پاک کرده و به تعداد کاراکتر های ورودی کاربر تا کنون ستاره چاپ کنید.:افسرده:
البته ایده جالبی نیست ، ولی چون تا جایی که من کار کردم تابع جایگزسن ندیدم حداقل فعلا همین به ذهنم میرسه.
ولی مطمئن باش اگه کد گیر بیارم برات میذارم.
موفق باشی.

h-qazvini
چهارشنبه 05 خرداد 1389, 12:23 عصر
متاسفانه posix تابع getch رو استاندارد سازي نكرده و اين تابعي هست كه كاراكتر رو مستقيم از كيبورد دريافت مي‌كنه. بدون نمايش آن در صفحه. براي جبران كمبود getch در لينوكس مي توانيد از اين تابع در برنامه تان استفاده كنيد.
تابع از :
http://cboard.cprogramming.com/faq-board/27714-faq-there-getch-conio-equivalent-linux-unix.html





#include <stdio.h>
#include <termios.h>
#include <unistd.h>

int mygetch( ) {
struct termios oldt,
newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}--------------------------------------------------------------------------------

mohamnt
چهارشنبه 05 خرداد 1389, 21:55 عصر
توی یکی از قسمت های cplusplus.com چنین کدی بود

#include <cstdlib>
#include <cstring>
#include <iostream>

int main(void) {
const char* correct = "password_for_root";
char* username = (char*)malloc(sizeof(char) * 1024);
strcpy(username, "password for ");
strcat(username, getlogin());
strcat(username, ": ");

char* passwd = (char*)malloc(sizeof(char) * 1024);

while (strcmp(passwd, correct)) {
passwd = getpass(username);
std::cerr << "Sorry, try again.\n";
}

std::cout << "Password is correct.\n";

free(username);
free(passwd);

return 0;
}
برای اینکه بتونم ازش استفاده کنم برای اینکه یه پسورد رو بگیره و اگه اشتباه بود سه بار بگیره و بار چهارم بیاد بیرون ؟؟؟ :اشتباه: نیاز به چه تغییراتی داره

mohamnt
شنبه 08 خرداد 1389, 11:24 صبح
کسی راه حلی نداره :-/