c++ numbering the inputs for simple program - c++

so im new to c++ and im doing a program that takes user inputs for any amount number say 5 so i will get 5 inputs from user and calculate the sum of it ,i did make the program but what i want for the output is say
"Enter Input 1:xx
"Enter Input 2:xx
so on and on as the user input say 5 so it goes on for 5 times however my program takes the user input and i enter it, it dosnt say enter input 1 ,so i want to show the enter input 1 enter 2 part hope someone can help me with this sorry for my poor explanation
#include<iostream>
using namespace std;
int main() {
while (true) {
// prompts the user to ask how many inputs they want
int x;
cout << "Enter input : ";
cin >> x;
// If x = -1 dont repeat the loop
if (x == -1)
break;
// get the input from above and calculate the total of the input
int sum = 0;
for (int i = 0; i < x; i++) {
int value;
cin >> value;
sum += value;
}
// Output the total
cout << "Output total: " << sum << endl;
}
system("pause");
return 0;
}

Okay to start out, there are times when to use break and there are times not to. This scenario is not meant for them. Although, I used one in my code I did it because I am rushing. I would recommend to take the code snippet, learn from it, and see how to optimize it :)
Also, just for future purposes its important to understand your task at hand and be able to communicate it well so others can help debug and answer your question.
Heres what I think your question is:
"I want to make a program in cpp that allows the user to first submit how many numbers they would like to input. From there I would then ask them for the indicated number of inputs. After gathering all inputs I will then add those numbers together and output the sum. If at any point they decide to type in -1, I will stop asking for inputs and give their sum on the spot."
#include<iostream>
using namespace std;
int main() {
bool runProgram = true;
cout << "Hi welcome to my sum calculator program!\n";
cout << "This program will prompt you for a number of inputs and then calculate the total of them.\n";
cout << "If you no longer want to be prompted for numbers at any time type in -1!\n";
cout << "Press enter to begin!\n";
cin.get();
while (runProgram) {
// prompts the user to ask how many inputs they want
int x;
cout << "How many inputs?\n";
cin >> x;
// If x = -1 dont repeat the loop
if (x == -1){
runProgram = false;
}else{
// get the input from above and calculate the total of the input
int sum = 0;
int val = 0;
for (int i = 0; i < x; i++) {
cout<< "Input #" << i+1;
cin >> val;
if(val == -1){
runProgram = false;
break;
}
sum += val;
}
// Output the total
cout << "Your Output total is " << sum << endl;
}
}
system("pause");
return 0;
}

Related

Hi I want user to enter 5 numbers and then output the sum in the end

I have used a loop for that:
int number1;
int sum=0;
for(int i =1; i<6; i++){
cout<<"Enter number:\n";
cin>>number1;
sum+=number1;
}
cout<<sum;
cout<<"Total Sum is = "<<sum<<"\n";
return 0;
}
My question is how can I print first statement like this ...
"Enter first number"
Enter Second number" and so on
Whenever you are reading numbers (or any value for that matter), you must check the stream-state (see: std::basic_istream State Functions). You have four stream states you must test following every input:
.bad() or .eof(). If badbit is set an unrecoverable error occurred, and if eofbit is set, there is nothing more to read (you can combine both into a single test that exits if either are set)
.fail() is set when a read error occurs, such as the user entering "FIVE" instead of 5 where integer input is expected. You handle failbit being set by calling .clear() to clear failbit and then call ignore() to empty the characters causing the failure before your next read attempt, and finally
.good() - valid input was received from the user, you can proceed to the next input.
By validating your input here, you can Require the user provide 5 valid integer values for you to sum. Do not use a for loop, instead use a while (or do .. while();) and only increment your counter when good input is received.
Putting that altogether, you can do:
#include <iostream>
#include <limits>
int main (void) {
int number = 0,
sum = 0;
const char *label[] = { "first", "second", "third", "fourth", "fifth" };
while (number < 5) /* loop continually until 5 int entered */
{
int tmp; /* temporary int to fill with user-input */
std::cout << "\nenter " << label[number] << " number: ";
if (! (std::cin >> tmp) ) { /* check stream state */
/* if eof() or bad() exit */
if (std::cin.eof() || std::cin.bad()) {
std::cerr << " (user canceled or unreconverable error)\n";
return 1;
}
else if (std::cin.fail()) { /* if failbit */
std::cerr << " error: invalid input.\n";
std::cin.clear(); /* clear failbit */
/* extract any characters that remain unread */
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
else { /* on succesful read of int, add to sum, increment number */
sum += tmp;
number++;
}
}
std::cout << "\nsum: " << sum << '\n';
}
Now your code will gracefully handle an invalid input without exiting just because a stray character was entered.
Example Use/Output
When you write an input routine, go try and break it. Enter invalid data and make sure you handle all error cases correctly. If something doesn't work right, go fix it. Repeat until you input routine can handle all corner-cases as well as the cat stepping on the keyboard:
$ ./bin/sumintlabel
enter first number: 3
enter second number: four five six seven!!
error: invalid input.
enter second number: 4
enter third number: 5
enter fourth number: 6
enter fifth number: 7
sum: 25
Form good habits now regarding handling input, it will pay dividends for the rest of your programming career. Let me know if you have questions.
if you need to print the words "first"... untill "fifth" then I'd do it like this:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int number1;
int sum=0;
string positions[5] = {"first", "second", "third", "fourth", "fifth"};
for(int i = 0; i<5; i++){
cout<<"Enter the " << positions[i] << " number:" << endl;
cin>>number1;
sum+=number1;
}
cout<<"Total Sum is = "<<sum<<"\n";
return 0;
}
I used an array of strings to display the words and changed the for loop to start at 0 so that we can go through the array positions and add the 5 numbers as well. If you just want to use: 1st, 2nd, 3rd... then you could change the for loop to what it was and do:
cout<<"Enter the " << i << "st" << " number:" << endl;
But for this you would have to use the if statement to print the right endings("st", "rd", "nd"). I think it would take longer for it to run but its miliseconds so we wouldn't even notice hahaha.
Hope it helped :)
You can use switch():
#include <iostream>
using std::cin;
using std::cout;
using std::string;
int main() {
int number1;
int sum = 0;
for(int i = 1; i < 6; i++) {
string num;
switch(i) {
case 1:
num = "first";
break;
case 2:
num = "second";
break;
//and 3 4 5 like this
}
cout << "Enter " << num << " number:\n";
cin >> number1;
sum += number1;
}
cout << "Total Sum is = " << sum << "\n";
return 0;
}
or you can use struct or containers like vector (in fact you have to use containers if you want to get a huge number of data.)

I wanna code a program that sums ages continuously

As the title states, I need to write a program that sums ages without asking the user to enter a specific number of ages to add beforehand. User shall just keep entering the desired ages until he writes "OK". Then, the program will stop and give the result. I've tried creating a string and when the string is equal to "OK" the program stops. However, I cannot figure it out.
int x,age;
int total=0;
int nofpeople=0;
int average=0;
string check;
cout<<"Enter the ages and when you're done write 'OK'." << endl;
while(check!="OK")
{
cin>>x;
if(x>0)
{
age=x;
nofpeople++;
total=total+age;
average=total/nofpeople;
}
else
{
check="OK";
}
}
cout<<"Number of people you have entered=" << nofpeople << endl;
cout<<"Sum of ages=" << total<< endl;
cout<<"Average of ages=" <<average;
return 0;
I have a code like this but this code obviously give result for the cases that I input to x "OK" or some randow letters like"adsfasd".I want it to work specificly for "OK".
I think something like this should work, I used istringstream class to convert the ages into integers, with error checking in case it doesn't work.
int x,age;
int total=0;
int nofpeople=0;
int average=0;
string check;
cout<<"Enter the ages and when you're done write 'OK'." << endl;
while(check!="OK")
{
string temp;
cin>>temp;
istringstream iss(temp);
iss >> x;
if(x>0)
{
age=x;
nofpeople++;
total=total+age;
average=total/nofpeople;
}
else if (temp.compare("OK") == 0)
{
check="OK";
}
else
{
cerr << "Invalid or negative number entered" << endl;
}
}
cout<<"Number of people you have entered=" << nofpeople << endl;
cout<<"Sum of ages=" << total<< endl;
cout<<"Average of ages=" <<average;
return 0;

Matching user inputs and calculating the inputs by the number c++

My question is to record the user 5 inputs and matching them to the correct code. singleperson code is 1, couple code is 2 and family is 3. Hence the users input will only be these 3 numbers.At the end I must calculate the total of the total number of people by their category. I ran the code and got runtime error saying stack around variable "groups" is corrupted and always have only 5 singles while the couples and families are 0. Sorry, I just started school and I'm a bit blurry..
int singleperson=0;
int couple=0;
int family3=0;
int groups[]={0,0,0,0,0};
cout << "Enter group #1:";
cin >>groups[0];
cout << "Enter group #2:";
cin >>groups[1];
cout << "Enter group #3:";
cin >>groups[2];
cout << "Enter group #4:";
cin >>groups[3];
cout << "Enter group #5:";
cin >>groups[4];
for (int a=0; a<=4;a++)
{
if(groups[a]=1)
{
singleperson= singleperson + 1;
}
else if(groups[a]=2)
{
couple = couple +1;
}
else
{
family3= family3+1;
}
}
cout<<"Statistics"<<endl;
cout <<singleperson<<"Singles"<<endl;
cout<<couple<<"Couples"<<endl;
cout<<family3<<"Families"<<endl;
Because size of group is 4 and you are trying to insert into 5th place. And as pointed by #antonio-garrido to check equality we use == and = is used for assignment.
int groups[]={0,0,0,0,0};
for (int a=0 ; a <= 4; a++) {
if(groups[a] == 1) {
singleperson= singleperson + 1;
} else if(groups[a] == 2) {
couple = couple +1;
} else {
family3= family3+1;
}
}

Need help to stop program terminating without users consent

The following code is supposed to do as follows:
create list specified by the user
ask user to input number
3.a) if number is on the list , display number * 2, go back to step 2
3.b) if number isn't on the list, terminate program
HOWEVER step 3.a) will also terminate the program, which is defeating the purpose of the while loop.
here is the code :
#include <iostream>
#include <array>
using namespace std;
int main()
{
cout << "First we will make a list" << endl;
array <int, 5>list;
int x, number;
bool isinlist = true;
cout << "Enter list of 5 numbers." << endl;
for (x = 0; x <= 4; x++)
{
cin >> list[x];
}
while (isinlist == true)
{
cout << "now enter a number on the list to double" << endl;
cin >> number;
for (x = 0; x <= 4; x++)
{
if (number == list[x])
{
cout << "The number is in the list. Double " << number << " is " << number * 2 << endl;
}
else
isinlist = false;
}
}
return 0;
}
Please can someone help me to resolve this ?
I would suggest that you encapsulate the functionality of step 3 into a separate function. You could define a function as follows, and then call it at an appropriate location in the main function.
void CheckVector(vector<int> yourlist)
{
.... // Take user input for number to search for
.... // The logic of searching for number.
if (number exists)
{
// cout twice the number
// return CheckVector(yourlist)
}
else
return;
}
The same functionality can be implemented with a goto statement, avoiding the need for a function. However, using goto is considered bad practice and I won't recommend it.
Your issue is that you set isinlist to false as soon as one single value in the list is not equal to the user input.
You should set isinlist to false ay the beginning of your while loop and change it to true if you find a match.
Stepping your code with a debugger should help you understand the issue. I encourage you to try it.

Is there a way to not include a negative number in an average, when entering a negative number is how you terminate the program?

Sorry about last time for those who saw my previous thread. It was riddled with careless errors and typos. This is my assignment:
"Write a program that will enable the user to enter a series of non-negative numbers via an input statement. At the end of the input process, the program will display: the number of odd numbers and their average; the number of even numbers and their average; the total number of numbers entered. Enable the input process to stop by entering a negative value. Make sure that the user is advised of this ending condition."
And here is my code:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int number, total1=0, total2=0, count1=0, count2=0;
do
{
cout << "Please enter a number. The program will add up the odd and even ones separately, and average them: ";
cin >> number;
if(number % 2 == 0)
{
count1++;
total1+=number;
}
else if (number >= 0)
{
count2++;
total2+=number;
}
}
while (number>=0);
int avg1 = total1/count1;
int avg2 = total2/count2;
cout << "The average of your odd numbers are: " << avg1 << endl;
cout << "The average of your even numbers are " << avg2 << endl;
}
It seems to be working fine, but when I enter a negative number to terminate the program, it includes it with the rest of the averaged numbers. Any advice to get around this? I know it's possible, but the idea escapes me.
Your main loop should be like this:
#include <iostream>
for (int n; std::cout << "Enter a number: " && std::cin >> n && n >= 0; )
{
// process n
}
Or, if you want to emit a diagnostic:
for (int n; ; )
{
std::cout << "Enter a number: ";
if (!(std::cin >> n)) { std::cout << "Goodbye!\n"; break; }
if (n < 0) { std::cout << "Non-positve number!\n"; break; }
// process n
}
After here:
cout << "Please enter a number. The program will add up the odd and even ones seperately, and average them: ";
cin >> number;
Immediately check if the number is negative
if(number < 0) break;
Now you wouldn't need to use your do-while loop in checking if the number is negative. Thus, you can use an infinite loop:
while(true) {
cout << "Please enter a number. The program will add up the odd and even ones seperately, and average them: ";
cin >> number;
if(number < 0) break;
// The rest of the code...
}
ADDITIONAL:
There is something wrong in your code. You aren't showing the user how much the number of even and odd numbers are, and the total number of numbers entered.
ANOTHER ADDITIONAL: You should use more meaningful variable names:
int totalNumEntered = 0, sumEven = 0, sumOdd = 0, numEven = 0, numOdd = 0;
Of course I am not limiting you to these names. You can also use other similar names.
FOR THE INTEGER DIVISION PROBLEM:
You must cast your expression values to the proper type (in this case, it is float). You should also change the averages variables' types to float:
float avg1 = float(total1) / float(count1);
float avg2 = float(total2) / float(count2);
Immediately after cin >> number, check for < 0, and break if so. Try to step through the program line by line to get a feel for the flow of execution. Have fun learning, and good luck!