.
I tried to finish the calculator code you started but it says there are errors. Can you please tell me what is wrong?
What errors are you getting?
There's an error that states "No 'object' file generated."
There's also a warning that states "'getEquationAnswer'; not all control paths return a value."
Oh, you have treat warnings as errors turned on. The compiler is complaining that all return paths are conditional, so if you pass in a different value (e.g. mop = 5) then you'll reach the end of the function without hitting a return value. This can be fixed by adding a non-conditional return statement to the end of your function.
Add a return -1; before the closing curly brace of function getEquationAnswer().
return -1;
Hi Alex,
Thank you for this good site
I am new here but found your site and method of teaching very nice
about the calculator code i have to change the void print result ()
and return 0;before my progran will compile correctly dont think any other people came across these issue
Hi Billy!
There's nothing wrong with the last snippet in this lesson. If you can't compile it, make sure you properly set up your compiler/IDE to avoid running into more problems in the future.
Hi,
I encountered this kind of error and warning:
error C2220: warning treated as -no object file generated
warning C4100 'argv': unreferenced formal parameter
warning C4100 'argv': unreferenced formal parameter
and this is the code. ive been looking for almost 30mins so i can debug that error. can you tell me what is wrong with this.
Your compiler is treating warnings as errors. This is a good thing.
You're getting 2 C4100 warnings. I guess the first one is for argc, not for argv, and you copied the message by hand.
Since your @main function has neither argc nor argv, I suspect that you forgot to save the file before compiling.
Don't use @system. Uncomment the return-statement in @main.
Yes you're correct. its argc.
I already save it sir but still getting the same error.
Your IDE/compiler isn't seeing the changes for a reason unknown to me. Create a new empty project, paste your code in there and it should work.
A very big thanks. Thanks for your courage.
Hi
First thanks for such a nice website for learning C++.
Next I would like to know your expert opinion about writing an algorithm using tools like Open Office Draw or Microsoft Visio before starting at actual coding.
Some people are very much against it, but personally I find it very helpful in case of complex programs.
If you find it helpful, draw diagrams. If you're working in a big team, draw diagrams (Or write everything down).
If you already worked it out in your head or would rather find a solution by coding, don't draw diagrams.
Agree with Nascardriver. Draw diagrams if you find them useful or need to share with others, don't if you don't.
int calculateResult(int x, int op, int y)
{
// note: we use the == operator to compare two values to see if they are equal
// we need to use if statements here because there's no direct way to convert op into the appropriate operator
if (op == 1) // if user chose addition (#1)
return x + y; // execute this line
if (op == 2) // if user chose subtraction (#2)
return x - y; // execute this line
if (op == 3) // if user chose multiplication (#3)
return x * y; // execute this line
if (op == 4) // if user chose division (#4)
return x / y; // execute this line
return x + y; // if the user passed in an invalid op, we'll do addition.
// we discuss better error handling in future chapters
}
Does not function stops at first return? In previous lecture, it was mentioned that after first return, everything after it is ignored. Also does not if statement requires {} for its correct execution?
Hi Mr. Stark!
> Does not function stops at first return?
Correct, but each return is only executed, if the condition in the if-statement is true.
> does not if statement requires {}
An if-statement without curly brackets considers the next statement (code until the next semicolon) as it's body. Curly brackets are only required if the body exceeds one statement. This is covered in a later lesson and was not used here, because there are more people who are confused by curly brackets than there are people who are confused by missing curly brackets.
Got it, Thanks
wow
Hey
Is there anyone to tell me that Why this program wasn't showing Result.
#include"stdafx.h"
#include<iostream>
using namespace std;
int getUserInput()
{
int value;
cout << "Take value from user:";
cin >> value;
return value;
}
int getMathematicalOperation()
{
int op;
cout << "Choose Operator (1=+,2=-,3=*,4=/):";
cin >> op;
return op;
}
int calculateResult(int x , int op, int y)
{
if (op==1)
return x + y;
if (op== 2)
return x - y;
if (op == 3)
return x * y;
if (op == 4)
return x + y ;
}
int printResult(int result)
{
cout << "Your Result is :" << result << endl;
}
int main()
{
int input1 = getUserInput();
int op = getMathematicalOperation();
int input2 = getUserInput();
int result = calculateResult(input1, op,input2);
printResult(result);
return 0;
}
Your program works as expected for me. What is your input, behavior, and expected behavior?
Enable compiler warnings and read them!
is missing a return statement but is expecting an integer value.
Doesn't getUserInput() and getMathematicalOperation() violate the "one task" rule by printing out the instructions in the same function as getting the input? Should I be cautious of this? If I replaced the cout lines with an initialization for a gui pop-up, would this violate the one task rule too?
To me, the primary objective of the functions are to get user input -- prompting the user to do so is just part of facilitating that task. There probably isn't much value in separating them, as you'd almost never want to do one without the other.
Hi Alex
hi nascardriver
well i tried to find other methods to make the calculator.
so i came up with this
I noticed that when calling a function arguments are always read from right to left
do you talk about this in future lessons
if not could you point me to where i could find more about this, so not to bother you too much
Hi Ahmed!
The evaluation order of arguments is undefined.
so there is a way to define the evaluation order of arguments
good to know
will it be discussed later
sorry for asking too much
thank you in advance
If you want your functions to execute in a specific order you need to call them before calling the target function an store their return values in temporaries:
This way the three functions are guaranteed to execute in the specified order.
Hi,
tried as suggested by designing the whole thing separately using Notepad++ with a plan and all then wrote the following:
Header file is simple here:
Keep getting same build error of <<Severity Code Description Project File Line Suppression State
Error C4700 uninitialized local variable 'f' used Dipole c:\users\nigel\documents\visual studio 2017\projects\dipole\dipole\dipole.cpp 20 >>
don't worry, sorted it myself - simply removed the f from the call to getFeq. Now line 20 reads double f = getFreq();
@f in the header is never used, but you have another "f" in @Dipole.cpp. This will cause a collision sooner or later.
The parameter of @getFreq isn't used, declare it as a local variable instead.
Don't define variables in header files.
Dear Teacher, please let me point out that in your program call user to do operation, including division, on two integers. Result is integer by definition, then, in most cases, is in error.
Actually, No.
Dividing two integers with an int return type results in an integer without decimals - no floating point.
So 30/10=3 and 33/10=3 also.
Hey.
Can anyone explain me what this "==" symbol does in more details? Thank you for your time (:
Hi Trevor!
== is used to compare two values
= is used to assign a value to a variable
nascardriver, Thanks for the reply.
But what do we do by comparing values? Why we need to compare values?
Comparing values is used for all kinds of stuff:
Do these players have the same score? Tie
Do we have the right amount of ingredients? Cook
Did the user enter "Hello"? Write world
...
HI, Anyone could help me, this is my first assignment. i really wanted to know for my reference next future. help me, thank you a lot
write a program to input 5 integar numbers. after the data have been entered, make the program to display the numbers.
modify the programs so that the numbers displayed will be double from the original values.
modify the program to find the smallest number in the array
modify the program so that after display the lowest value, the program will also display the sum of all the values.
What exactly do you need help with? I'm not going to write your assignment for you.
its okay, thank you for reply. i just really wanted to know the example for that.
Dear Sir!
In line no.s 30 through 39, variable 'y' has been used, but it has never been declared;
how can it be possible?
Thank you.
Best regards.
Hi Prabhat Kumar Roy!
@x and @y are parameters to @calculateResult (Line 25).
Function parameters are covered in lesson 1.4a.
Thank you Sir!
Although I wrote to you, but immediately I started my 3rd revision from lesson 1 and I got it cleared.
Hello . So why didn't you use the switch statement, eliminates the possibility to choose another number ? I'm not saying that your code is written wrong or something, of course your code it's explained very well.
We haven't covered switch statements at this point in the tutorial series.
Hi, I tried and my program successfully compiled, however, I am curious to know one thing here; instead of using int for all the functions and variables, is it possible to use floats in order to get appropriate values/ decimal values (especially with the division operator)? If yes how? It would be great if anyone can guide me through. I am using Microsoft Visual Studio 2017.
Hi Shaheen!
It's as simple as replacing every 'int' with 'float'. I used 'double' as a double is more precise than a float.
Hello.
Thanks for the lessons.
One note, this lesson does not appear good and adapted on mobile, unlike other lessons.
thank you
At "Step 1: Define the problem", it is written "I want a better way to keep track of my friend’s phone numbers." Instead of the singular possessive "friend's" don't you mean the plural possessive "friends'"?
Yes. Thanks for pointing that out.
I have been trying different inputs in the Calculator program to try and break it, for fun. For input1, I entered 999999999999999 so the value overflows. This is what the debugger shows (Xcode on mac):
input1 int 2147483647
op int 32767
input2 int 32767
result int -2147450882
My question is, why are the input1 and result int's 4 bytes long (32 bit) and the op and input2 int are only 2 bytes long (16 bit)? Why aren't all of the int's in my program the same length? It seems strange.
Regards
That does seem strange. Are you sure those integers are actually 2 bytes? Or is it just that they've taken the largest 2-byte value for some reason?
You are correct, they are actually all 4 byte int’s. I used the sizeof() function, this is the output:
sizeof intput1 = 4
sizeof op = 4
sizeof intput2 = 4
I have not figured out why the value of op and input2 is still only the largest 2 byte value that can be stored. This is my code, if of interest:
Robert, I made some minor changes and I am not seeing the input size issues that you saw. Very likely they are due to compiler differences. I am running g++ 4.6 on an Ubuntu Linux machine.
Can you try rerunning with the slight changes I made? I don’t expect it to fix your problem, but I am curious.
Last bulletpoint in step 1 is missing.
Thanks, fixed.
At what point did we give variable y an input
Hi,
Maybe somebody else mentioned this but I think "I want to write a phone book application to help me keep track of my friends’ phone numbers." is not a problem and should not be in Step 1 : Define the problem.
You are basically suggesting a solution (a phone book app ... ) in the definition of your problem.
The problem is "I can't keep track of my friends' phone numbers".
Fair enough. It's tempting to solution too early. I've updated the article accordingly.
why do we have to return -1 in calculateresult() function??!!
And why don't we use:
int result = calculateResult(int input1, int op, int input2)
And can we return 0 at the end of main func.?
If the user passes in an invalid operation, none of the if statements will match. The function says it returns an int to the caller -- so what should we return? I picked -1 -- which is a poor choice, because the entire range of integers is potentially valid, so there's no way to differentiate a valid result from an invalid one. In reality, we'd use some other error handling mechanism to avoid this situation altogether -- but we covered those yet.
In any case, I changed the behavior of the function so that if the user passes in an invalid op, it will now default to addition.
I also updated the code to explicitly return 0 at the end of main.
Someone please help me troubleshoot this. No matter what I do or name things I get an error "calculateResult function does not take 3 arguments"
int getFirstInt()
{
std::cout << "Please enter your first integer: ";
int x;
std::cin >> x;
std::cout << "You entered " << x << std::endl;
return x;
}
int getMathOp()
{
std::cout << "Please enter which operator you want (+, -, *, /)";
char op;
std::cin >> op;
std::cout << "You entered " << op << std::endl;
return op;
}
int getSecondInt()
{
std::cout << "Please enter your second integer: ";
int y;
std::cin >> y;
std::cout << "You entered " << y << std::endl;
return y;
}
int calculateResult(int x, char op, int y)
{
if (op == '+')
return x + y;
if (op == '-')
return x - y;
if (op == '*')
return x * y;
if (op == '/')
return x / y;
return 0;
}
int main()
{
int x = getFirstInt();
char op = getMathOp();
int y = getSecondInt();
int result = calculateResult(x, op, y);
std::cin.clear();
std::cin.ignore(32767, '\n');
std::cin.get();
return 0;
Works fine for me on Visual Studio 2017.
Hmm. That's what I'm using. I restarted the program and it still doesn't work. Code C2660. But I'm glad it's otherwise correct. Thanks, Alex.
Alex You are a great teacher.
amen to that, this course is amazing :D.
This is good?
Es muy largo pero me gusta el codigo
HEY ALEX!
THE CALCULATOR DOES NOT GIVING FLOAT VALUE
HERE I EDIT THIS IS IT
RIGHT WAY OR THERE ANOTHER WAY TO DO THAT PLEASE TELL ME..
;
}
function getUserInput() is returning an integer, so the user's floating point input is being implicitly converted to an integer. Your compiler should be generating a warning about this.
HI ALEX!
IN CALCULATOR PROGRAM
WHERE IS SECOND GetUserInput()
I MEAN WHERE IS Y THERE X BUT NOT Y;'
BUT IT COMPILE WHY?
GetUserInput() is a reusable function. We can call it as many times as we need. We call it twice.
Once to get the first user input:
And once to get the second user input:
These are then passed into function calculateResult() as parameters x and y.
THANK YOU
AND I WANT TO KNOW IT IS IMPORTANT
TO LEARN ABOUT DEBUGER AND WANT TO
KNOW IS RELEASE IS USED TO UPLOAD
YOUR PROGRAM ON INTERNET SO PUBLIC CAN USE OR SEE IT.....
Yes, it's very important to learn about the debugger if you're going to be developing a non-trivial program. A release build target is used when you want to release your program to others, as it optimizes your code for speed and size rather than easy debugging.
Hello Alex!
Sorry for disturbing you again.
Following is a program which is almost exactly the same as the calculator program above, but with certain variations.
The program doesn't seem to compile. At the 45th line the compiler says " error : expected primary-expression before 'int' ".
Could you please help me out? Thank you very much!
Also, should there be a 'return 0' at the end?
Hi Ahmed,
Replace line 45 with the following
Since you have already initiallized the variables p,q and r and you only need to pass them into the function.
We generally specify the type of the variable during initiallization only and not when we are passing them into a fuction.
Hope this helps
Thank you!!
should be
The return 0 at the end of main() is optional, but I like to include it.
Thanks!!
Hey there Alex!
Thank you for teaching me the basics of C++!
I was trying to create a program that would calculate the percentage. Although there are no errors, the percentage is always 0. Could you please look into the program and tell me what is wrong?
Thanks!
a and b are integers, and integers can't deal with fractions. You'll have to use a floating point type (double). We talk about those next chapter.
Thank you so much!
Name (required)
Website