while loop in matlab password GUI
2 次查看(过去 30 天)
显示 更早的评论
Hi, i want to create a matlab program that will require the user to enter the username and password before they can gain access to the program. so far i have able to do it if the correct password is enter but i cannot get the program to loop corretly. i want if the user enter the wrong combination of password/username lets say maximum 3 times, the system will terminated. plz help me guys...waste a lot of time on doing this.
username1=*****;
password1=****;
username = upper(get(handles.edit1,'string'));
password = upper(get(handles.edit6,'string'));
if(strcmpi(username,username1))
if (strcmpi(password,password1))
disp('successfully log into the system');
else
close all
end
else
close all
end
0 个评论
采纳的回答
David Sanchez
2013-5-8
Two things: first, you should create a variable (global) called attempts, this variable is initialize at the beginning, right after the GUI is opened. The rest of the code:
% this goes in your login pushbutton callback function
username = get(handles.usrbox,'string');
password = get(handles.psswrdbox, 'string');
attempts = attempts + 1;
if strcmpi(username, username1)&&strcmpi(password,password1)
disp('b')
elseif attempts == 3
disp('a');
end
has to be placed on the callback function. Do you insert a login pushbutton? ( A button that has to be pushed in order to login ) If not, the code should be pasted on the edit box callback function (watch out! I guess you have two edit boxes, one for username and another for password, paste it on the password edit box callback ). I would advice to insert a login pushbutton, but that's up to you.
更多回答(5 个)
David Sanchez
2013-5-7
I hope following code is of help
username1 = 'xxx';
password1 = 'yyy';
attemps = 0;
while attemps < 4
username = input('intoduce user name: ');
password = input('intoduce password: ');
if(strcmpi(username,username1))&&(strcmpi(password,password1))
disp('successfully log into the system');
return
else
attemps = attemps + 1;
end
end
David Sanchez
2013-5-8
Hi, since disp('a'); is outside the while loop, it will always be displayed. You can set a condition if to display 'a' only if 3 attempts were made
username1= 'xxx';
password1= 'yyy';
attempt= 0;
while attempt < 3
username = upper(get(handles.edit1,'string'));
password = upper(get(handles.edit6,'string'));
if(strcmpi(username,username1))&&(strcmpi(password,password1))
disp('b');
return
else
attempt = attempt + 1;
end
end
if attempt == 3
disp('a');
end
I hope it helped you, do not forget to vote if so.
David Sanchez
2013-5-8
Hi, that's a bit awkward, with the code above, disp('a') only comes to work when attempt equals 3 ( if attempt == 3 ). I tested it myself and 'a' is only displayed after three unsuccessful attempts were made. You can try the following version too: ( adapt it for you GUI later, it is easier to debug code outside the GUI, once it works as you want, insert it in the GUI )
username1= 'xxx';
password1= 'yyy';
attempt= 0;
while attempt < 3
username = input('intoduce user name: ');
password = input('intoduce password: ');
if(strcmpi(username,username1))&&(strcmpi(password,password1))
disp('b');
return
else
attempt = attempt + 1;
if attempt == 3
disp('a');
end
end
end
3 个评论
Teja Muppirala
2013-5-8
But first change this:
username = input('intoduce user name: ');
password = input('intoduce password: ');
To this:
username = input('intoduce user name: ','s');
password = input('intoduce password: ','s');
to indicate the input is a string, otherwise you'll have to put quotes in your input to distinguish it from a variable.
Teja Muppirala
2013-5-8
In your GUI case, the reason it displays 'a' after just one failed attempt is, this loop:
username1= 'xxx';
password1= 'yyy';
attempt= 0;
while attempt < 3
username = upper(get(handles.edit1,'string'));
password = upper(get(handles.edit6,'string'));
if(strcmpi(username,username1))&&(strcmpi(password,password1))
disp('b');
return
else
attempt = attempt + 1;
end
end
if attempt == 3
disp('a');
end
runs 3 times instantly before you can even change the values in the edit boxes. I'm assuming this code is in some callback, like a pushbutton or something. You're going to need to check the password only once every time the user runs this callback function, and keep track of how many times they tried/failed. For example, you might store the variable attempt as 'Userdata' or use SETAPPDATA or something. Then increment it once everytime the user submits the password.
0 个评论
David Sanchez
2013-5-8
Teja got it right, I think next code would be helpful ( it needs to be adapted to your GUI )
attempts = 0; % do not initialize this variable in pushbutton callback function
% this goes in your login pushbutton callback function
username = get(handles.usrbox,'string');
password = get(handles.psswrdbox, 'string');
attempts = attempts + 1;
if strcmpi(username, username1)&&strcmpi(password,password1)
disp('b')
elseif attempts == 3
disp('a');
end
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Startup and Shutdown 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!