simple calculator using GUI
    86 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
I tried to make a simple calculator with GUI.
For that purposes i want to take  the input as string.then convert this string into number ,and then perfom the operation.
For instance i would like to take input like 
("5+6/3")
and then using str2num i want to perform that operation.
In all button i use almost the same code like  (  here i show the code for button 1 and divison sign.)
% --- Executes on button press in division.
function division_Callback(hObject, eventdata, handles)
% hObject    handle to division (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
s=get(handles.screen,'string');
set(handles.screen,'string',strcat(s,'/'));
% --- Executes on button press in button1.
function button1_Callback(hObject, eventdata, handles)
% hObject    handle to button1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
s=get(handles.screen,'string');
set(handles.screen,'string',strcat(s,'1'));
In equal button 
% --- Executes on button press in equal.
function equal_Callback(hObject, eventdata, handles)
% hObject    handle to equal (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
p = str2num(s);  % it will convert the string in mathmatical expression then perform the operation
set(handles.screen,'string',num2str(p));

It didn't show the expected output.
What to change in equal Button?
Thanks in Advance.
0 Commenti
Risposta accettata
  Rik
      
      
 il 19 Apr 2021
        For general advice and examples for how to create a GUI (and avoid using GUIDE), have look at this thread.
Every callback is a separate function that doesn't know what happened in the other functions. That means the variable s doesn't exist.
function equal_Callback(hObject, eventdata, handles)
s=get(handles.screen,'string');
p = str2num(s);  % calls eval implicitly
set(handles.screen,'string',num2str(p));
You should be really careful with str2num. It calls eval, meaning it can execute arbitrary code. You should avoid it when possible. In this case it is safe, as long as the user doesn't type any code in the text box.
Più risposte (3)
  Ngo Nguyen
 il 19 Apr 2021
        I think you should use the function: eval
2 Commenti
  Ngo Nguyen
 il 19 Apr 2021
				At first, check your equal_Callback, what is s?  
When you start a new function, the parameter "s" is no longer exist?
What kind of the error message did you get?
  Md. Ashikur Rahman Any
 il 21 Apr 2021
        1 Commento
  Rik
      
      
 il 21 Apr 2021
				You should not rely on global variables. You have the handles struct right there to share data between callbacks.
You should also consider storing handles.screen.String separately (and restore it every callback that changes it). That way you can avoid malicious input.
Vedere anche
Categorie
				Scopri di più su Graphics Object Properties in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



