Caesar Crypher/Decypher Program. C++ [closed] - c++
Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 8 years ago.
Improve this question
I'm working on a school project, my project is a Cypher and Decypher program that works with Caesar Algorithm.
My program has to have the following characteristics:
The program must give the user the option to initiate again. (Done.)
If the user inputs something wrong, the program must ask the user to imput again. (Done with a bug.)
The user can only input letters and - por spaces. (I only need to add the space thing.)
The letter must be moved 5 places (ie. A = F) (Done.)
The program must consider capital letters. (Done.)
Each time you input a letter the screen must clear. (Done.)
At the end of the program you must be able to see the encrypted or decrypted text. (Needs to finish.)
What I need to know is how to make the program show me the encrypted text, counting all the inputs I have made so far while the program has been running.
And an extra thing is how can I input a whole text sentence and apply the Caesar Encryption, obviously I'd have to change almost all my code but I'd like how to do it.
This is the code I have so far, sorry if the sentences are in Spanish but I am living in Mexico for the moment and my classes are in Spanish. If you need me to translate the text I can gladly do it for you.
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main(int, char**) {
// Variables.
char l;
int x = 0;
char y = x + l;
bool volverainiciar;
volverainiciar = 1;
while (volverainiciar == 1) {
cout << "Favor de introducir la letra del mensaje que desea codificar."
<< endl;
cin >> l;
cout << " " << endl;
cout << " " << endl;
if ((l >= 'a' && l <= 'u') || (l >= 'A' && l <= 'U')) {
cout << "El mensaje a codificar es: " << l;
cout << " " << endl;
cout << " " << endl;
cout << "La letra " << l << " tiene un codigo ASCII de: " << x + l
<< endl;
y = (l + 5);
cout << "La letra " << l << " encriptado tiene un valor de: " << y
<< endl;
cout << " " << endl;
cout << " " << endl;
cout << "Se limpiara la pantalla..." << endl;
system("pause");
system("cls");
cout << " Desea volver a iniciar?" << endl;
cout << " " << endl;
cout << " Para volver a iniciar (1) , para no volver a "
"iniciar (0)" << endl;
cout << " " << endl;
cout << "Volver a iniciar: ";
cin >> volverainiciar;
cout << " " << endl;
cout << " " << endl;
} else if ((l >= 'v' && l <= 'z') || (l >= 'V' && l <= 'Z')) {
switch (l) {
case 'v':
cout << "El mensaje a codificar es: " << l;
cout << " " << endl;
cout << " " << endl;
cout << "La letra u tiene un codigo ASCII de: " << x + l
<< endl;
cout << "La letra " << l
<< " encriptado tiene un valor de: a" << endl;
cout << " " << endl;
cout << " " << endl;
cout << "Se limpiara la pantalla..." << endl;
system("pause");
system("cls");
cout << " Desea volver a iniciar?" << endl;
cout << " " << endl;
cout << " Para volver a iniciar (1) , para no volver "
"a iniciar (0)" << endl;
cout << " " << endl;
cout << "Volver a iniciar: ";
cin >> volverainiciar;
cout << " " << endl;
cout << " " << endl;
break;
case 'w':
cout << "El mensaje a codificar es: " << l;
cout << " " << endl;
cout << " " << endl;
cout << "La letra u tiene un codigo ASCII de: " << x + l
<< endl;
cout << "La letra " << l
<< " encriptado tiene un valor de: b" << endl;
cout << " " << endl;
cout << " " << endl;
cout << "Se limpiara la pantalla..." << endl;
system("pause");
system("cls");
cout << " Desea volver a iniciar?" << endl;
cout << " " << endl;
cout << " Para volver a iniciar (1) , para no volver "
"a iniciar (0)" << endl;
cout << " " << endl;
cout << "Volver a iniciar: ";
cin >> volverainiciar;
cout << " " << endl;
cout << " " << endl;
break;
case 'x':
cout << "El mensaje a codificar es: " << l;
cout << " " << endl;
cout << " " << endl;
cout << "La letra u tiene un codigo ASCII de: " << x + l
<< endl;
cout << "La letra " << l
<< " encriptado tiene un valor de: c" << endl;
cout << " " << endl;
cout << " " << endl;
cout << "Se limpiara la pantalla..." << endl;
system("pause");
system("cls");
cout << " Desea volver a iniciar?" << endl;
cout << " " << endl;
cout << " Para volver a iniciar (1) , para no volver "
"a iniciar (0)" << endl;
cout << " " << endl;
cout << "Volver a iniciar: ";
cin >> volverainiciar;
cout << " " << endl;
cout << " " << endl;
break;
case 'y':
cout << "El mensaje a codificar es: " << l;
cout << " " << endl;
cout << " " << endl;
cout << "La letra u tiene un codigo ASCII de: " << x + l
<< endl;
cout << "La letra " << l
<< " encriptado tiene un valor de: d" << endl;
cout << " " << endl;
cout << " " << endl;
cout << "Se limpiara la pantalla..." << endl;
system("pause");
system("cls");
cout << " Desea volver a iniciar?" << endl;
cout << " " << endl;
cout << " Para volver a iniciar (1) , para no volver "
"a iniciar (0)" << endl;
cout << " " << endl;
cout << "Volver a iniciar: ";
cin >> volverainiciar;
cout << " " << endl;
cout << " " << endl;
break;
case 'z':
cout << "El mensaje a codificar es: " << l;
cout << " " << endl;
cout << " " << endl;
cout << "La letra u tiene un codigo ASCII de: " << x + l
<< endl;
cout << "La letra " << l
<< " encriptado tiene un valor de: e" << endl;
cout << " " << endl;
cout << " " << endl;
cout << "Se limpiara la pantalla..." << endl;
system("pause");
system("cls");
cout << " Desea volver a iniciar?" << endl;
cout << " " << endl;
cout << " Para volver a iniciar (1) , para no volver "
"a iniciar (0)" << endl;
cout << " " << endl;
cout << "Volver a iniciar: ";
cin >> volverainiciar;
cout << " " << endl;
cout << " " << endl;
break;
case 'V':
cout << "El mensaje a codificar es: " << l;
cout << " " << endl;
cout << " " << endl;
cout << "La letra u tiene un codigo ASCII de: " << x + l
<< endl;
cout << "La letra " << l
<< " encriptado tiene un valor de: A" << endl;
cout << " " << endl;
cout << " " << endl;
cout << "Se limpiara la pantalla..." << endl;
system("pause");
system("cls");
cout << " Desea volver a iniciar?" << endl;
cout << " " << endl;
cout << " Para volver a iniciar (1) , para no volver "
"a iniciar (0)" << endl;
cout << " " << endl;
cout << "Volver a iniciar: ";
cin >> volverainiciar;
cout << " " << endl;
cout << " " << endl;
break;
case 'W':
cout << "El mensaje a codificar es: " << l;
cout << " " << endl;
cout << " " << endl;
cout << "La letra u tiene un codigo ASCII de: " << x + l
<< endl;
cout << "La letra " << l
<< " encriptado tiene un valor de: B" << endl;
cout << " " << endl;
cout << " " << endl;
cout << "Se limpiara la pantalla..." << endl;
system("pause");
system("cls");
cout << " Desea volver a iniciar?" << endl;
cout << " " << endl;
cout << " Para volver a iniciar (1) , para no volver "
"a iniciar (0)" << endl;
cout << " " << endl;
cout << "Volver a iniciar: ";
cin >> volverainiciar;
cout << " " << endl;
cout << " " << endl;
break;
case 'X':
cout << "El mensaje a codificar es: " << l;
cout << " " << endl;
cout << " " << endl;
cout << "La letra u tiene un codigo ASCII de: " << x + l
<< endl;
cout << "La letra " << l
<< " encriptado tiene un valor de: C" << endl;
cout << " " << endl;
cout << " " << endl;
cout << "Se limpiara la pantalla..." << endl;
system("pause");
system("cls");
cout << " Desea volver a iniciar?" << endl;
cout << " " << endl;
cout << " Para volver a iniciar (1) , para no volver "
"a iniciar (0)" << endl;
cout << " " << endl;
cout << "Volver a iniciar: ";
cin >> volverainiciar;
cout << " " << endl;
cout << " " << endl;
break;
case 'Y':
cout << "El mensaje a codificar es: " << l;
cout << " " << endl;
cout << " " << endl;
cout << "La letra u tiene un codigo ASCII de: " << x + l
<< endl;
cout << "La letra " << l
<< " encriptado tiene un valor de: D" << endl;
cout << " " << endl;
cout << " " << endl;
cout << "Se limpiara la pantalla..." << endl;
system("pause");
system("cls");
cout << " Desea volver a iniciar?" << endl;
cout << " " << endl;
cout << " Para volver a iniciar (1) , para no volver "
"a iniciar (0)" << endl;
cout << " " << endl;
cout << "Volver a iniciar: ";
cin >> volverainiciar;
cout << " " << endl;
cout << " " << endl;
break;
case 'Z':
cout << "El mensaje a codificar es: " << l;
cout << " " << endl;
cout << " " << endl;
cout << "La letra u tiene un codigo ASCII de: " << x + l
<< endl;
cout << "La letra " << l
<< " encriptado tiene un valor de: E" << endl;
cout << " " << endl;
cout << " " << endl;
cout << "Se limpiara la pantalla..." << endl;
system("pause");
system("cls");
cout << " Desea volver a iniciar?" << endl;
cout << " " << endl;
cout << " Para volver a iniciar (1) , para no volver "
"a iniciar (0)" << endl;
cout << " " << endl;
cout << "Volver a iniciar: ";
cin >> volverainiciar;
cout << " " << endl;
cout << " " << endl;
break;
}
} else {
cout << "Ese simbolo no es valido, favor de introducir uno valido."
<< endl;
cin >> l;
cout << " " << endl;
cout << " " << endl;
continue;
}
}
cout << "Gracias por usar el encriptador/desencriptador." << endl;
exit;
return 0;
}
If you have any suggestions I'll gladly read them too :)
And sorry for any misspellings my english is not perfect because almost my whole life I've been living here...
I hate to trash your really long program, but it was annoying.
Try this:
// Given the input character is in x.
if (std::isalpha(x))
{
if (std::islower(x))
{
y = (x - 'a'); // Convert to a number.
y = y + 5; // Left shift by 5
y = y % 26; // Modulo arithmetic for all letters in alphabet
y = y + 'a'; // Convert back to character.
}
else
{
y = (x - 'A'); // Convert to a number.
y = y + 5; // Left shift by 5
y = y % 26; // Modulo arithmetic for all letters in alphabet
y = y + 'A'; // Convert back to character.
}
}
One of my pet peeves is duplicate code. Although there is duplicate code above, I've reduced the amount of duplication in your code. Feel free to add all your cout statements in the code above.
By the way, you can "block write" your data to cout, if the data doesn't use variables.
Example:
static const char answer_text[] =
"\n"
"\n"
"La letra u tiene un codigo ASCII de: ";
//...
cout.write(answer_text, sizeof(answer_text) - 1);
This will allow you to use the cout.write statement everywhere you need to use the same text. Less typing, less lines, less probability of injecting a defect.
Related
Two functions making my game crash when running in a row
I usually find answers for my problems on this forum, but this time I can't. This is why I am asking you. (Sorry in advance for the mistakes I'm doing in english or c++) So here is my void function, it is just the start of a little game I'm making in the console. It is just showing some informations. By the way it's a french game, but I don't think that a traduction is needed to solve my problem. void showIntro (Personnage a, Personnage b, Personnage c) { cout << endl; cout << "VOUS ENTREZ DANS LES MINES DE LA MORIA" << endl << endl; cout << "ENNEMIS PRESENTS : " << endl << endl; cout << " " << "Orc robuste" << endl << endl << endl; a.afficherEtatIntro (); cout << endl << endl; cout << " " << "Orc robuste" << endl << endl << endl; b.afficherEtatIntro (); cout << endl << endl; cout << " " << "Orc robuste" << endl << endl << endl; c.afficherEtatIntro (); cout << endl << endl; cout << "Le combat va commencer"; Sleep(1000); cout << "."; Sleep(1000); cout << "."; Sleep(1000); cout << "." << endl << endl << endl; cout << "Gimli : "; string phraseGimli ("Je vengerai mes freres!"); for (int f = 0; f <= phraseGimli.size(); f++) // Just writing a sentence { cout << phraseGimli[f]; Sleep(100); } cout << endl << "Legolas : "; string phraseLegolas ("Nous sommes avec toi mon ami"); for (int g = 0; g <= phraseLegolas.size(); g++) // Writing a sentence { cout << phraseLegolas[g]; Sleep(100); } cout << endl << "Aragorn : "; string phraseAragorn ("POUR LE GONDOR"); for (int i = 0; i <= phraseAragorn.size(); i++) // Writing a sentence { cout << phraseAragorn[i]; Sleep(100); } } And here is the other one. void choixAttaque (Personnage joueur, Personnage a, Personnage b, Personnage c, string nom) { cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl; cout << "Qui souhaitez vous attaquer ?" << endl; cout << endl; cout << endl; cout << " " << nom << endl << endl << endl; a.afficherEtatIntro (); cout << endl << "Tapez 1" << endl; cout << " " << nom << endl << endl << endl; b.afficherEtatIntro (); cout << endl << "Tapez 2" << endl; cout << " " << nom << endl << endl << endl; c.afficherEtatIntro (); cout << endl << "Tapez 3" << endl; int choix; do { cin >> choix; } while (choix <= 0 || choix >= 4); switch (choix) { case 1: joueur.attaquer(a); case 2: joueur.attaquer(b); case 3: joueur.attaquer(c); } } afficherEtatIntro () void Personnage::afficherEtatIntro () const { cout << " " << "Vie : " << m_vie << endl; cout << " "; m_arme->afficher(); } m_arme means m_weapon, I used "->" because it is from a pointer. I'm new to all of this, so it can be really possible that the mistake comes from here. When I'm using only one, it works, but when I'm using both in a row, it does that. first void function showing properly And then. Path of things in my computer I hope I gave the informations needed to solve the problem, and I hope it can be solved. Thanks in advance for everything, and sorry for all the mistakes I may have made in english, c++ or by linking my lines of code. ^^' (Btw, all the "cout << endl;" looks ugly I guess, but that is just until I learn how to use Qt..) From debugger: "Program received signal SIGSEGV, Segmentation fault." And a picture in comment. (Need more reputation for 3 links..)
How do I create an accumulator in C++ using a user defined function?
I am trying to keep a running total of cups of coffee sold and I have to use a user defined function to do it. I have tried numerous variations of the attached code but nothing seems to work. What am I doing wrong? Also I am a newb to C++ so that is why it looks amateurish! #include <iostream> #include <iomanip> #include <fstream> #include <string> using namespace std; const int SM_OZ = 8; const int MD_OZ = 12; const int LG_OZ = 16; const double SM_PRICE = 1.19; const double MD_PRICE = 1.49; const double LG_PRICE = 1.89; const double TAX = .0825; void amtSold(int &smtCup, int &mdtCup, int &lgtCup); int main() { int selection; int smCup; int mdCup; int lgCup; int smtCup; int mdtCup; int lgtCup; smCup = 0; mdCup = 0; lgCup = 0; do { cout << "COFFEE SHOP" << endl; cout << "1. Sell Coffee" << endl; cout << "2. Total Number of Cups Sold" << endl; cout << "3. Total Amount of Coffee Sold" << endl; cout << "4. Total Amount of Money made" << endl; cout << "0. Exit" << endl; cout << "Type a number to continue: "; cin >> selection; cout << endl; //loop through the solutions based on the user's selection switch (selection) { case 1: cout << "How many small cups of coffee: "; cin >> smCup; cout << "How many medium cups of coffee: "; cin >> mdCup; cout << "How many large cups of coffee: "; cin >> lgCup; system("cls"); cout << fixed << setprecision(2) << endl; //Sale Coffee Receipt Page cout << "COFFEE SHOP" << endl; cout << "SIZE" << setw(21) << "Number" << setw(18) << "Price" << setw(18) << "Total" << endl; cout << "Small: " << setw(18) << smCup << setw(18) << SM_PRICE << setw(18) << smCup*SM_PRICE << endl; cout << "Medium: " << setw(17) << mdCup << setw(18) << MD_PRICE << setw(18) << mdCup*MD_PRICE << endl; cout << "Large: " << setw(18) << lgCup << setw(18) << LG_PRICE << setw(18) << lgCup*LG_PRICE << endl; cout << "Subtotal: " << setw(51) << (smCup*SM_PRICE)+(mdCup*MD_PRICE)+(lgCup*LG_PRICE) << endl; cout << "Tax: (8.25%)" << setw(49) << ((smCup*SM_PRICE) + (mdCup*MD_PRICE) + (lgCup*LG_PRICE))*TAX << endl; cout << "Total: " << setw(54) << ((smCup*SM_PRICE) + (mdCup*MD_PRICE) + (lgCup*LG_PRICE))+(((smCup*SM_PRICE) + (mdCup*MD_PRICE) + (lgCup*LG_PRICE))*TAX) << endl; cout << endl; cout << endl; break; case 2: //Total Number of Cups Sold cout << "REPORT - NUMBER OF COFFEE CUPS SOLD" << endl; amtSold(smtCup, mdtCup, lgtCup); cout << "SIZE" << setw(21) << "Number" << endl; cout << "Small: " << setw(18) << smCup << endl; cout << "Medium: " << setw(17) << mdCup << endl; cout << "Large: " << setw(18) << lgCup << endl; cout << endl; cout << endl; break; case 3: //Total Amount of Coffee Sold cout << "REPORT - AMOUNT OF COFFEE SOLD" << endl; cout << "SIZE" << setw(21) << "Number" << setw(18) << "OZ" << endl; cout << "Small: " << setw(18) << smCup << setw(18) << smCup*SM_OZ << endl; cout << "Medium: " << setw(17) << mdCup << setw(18) << mdCup*MD_OZ << endl; cout << "Large: " << setw(18) << lgCup << setw(18) << lgCup*LG_OZ << endl; cout << "Total: " << setw(36) << (smCup*SM_OZ) + (mdCup*MD_OZ) + (lgCup*LG_OZ) << endl; cout << endl; cout << endl; break; case 4: //Total Amount of Money made cout << "COFFEE SHOP - REPORT MONEY MADE" << endl; cout << "SIZE" << setw(21) << "Number" << setw(18) << "Price" << setw(18) << "Total" << endl; cout << "Small: " << setw(18) << smCup << setw(18) << SM_PRICE << setw(18) << smCup*SM_PRICE << endl; cout << "Medium: " << setw(17) << mdCup << setw(18) << MD_PRICE << setw(18) << mdCup*MD_PRICE << endl; cout << "Large: " << setw(18) << lgCup << setw(18) << LG_PRICE << setw(18) << lgCup*LG_PRICE << endl; cout << "Subtotal: " << setw(51) << (smCup*SM_PRICE) + (mdCup*MD_PRICE) + (lgCup*LG_PRICE) << endl; cout << "Tax: (8.25%)" << setw(49) << ((smCup*SM_PRICE) + (mdCup*MD_PRICE) + (lgCup*LG_PRICE))*TAX << endl; cout << "Total: " << setw(54) << ((smCup*SM_PRICE) + (mdCup*MD_PRICE) + (lgCup*LG_PRICE)) + (((smCup*SM_PRICE) + (mdCup*MD_PRICE) + (lgCup*LG_PRICE))*TAX) << endl; cout << endl; cout << endl; break; case 0: system("cls"); break; default: //notify the user that an invalid selection has been inputted cout << "You have made an invalid selection. Please choose a number from the list." << endl; cout << endl; } } while (selection != 0); system("pause"); return 0; } void amtSold(int &smtCup, int &mdtCup, int &lgtCup) { int smCup; int mdCup; int lgCup; smCup = 0; mdCup = 0; lgCup = 0; smtCup += smCup; mdtCup += mdCup; lgtCup += lgCup; }
So as you probably know, you're not keeping track of the number of coffee cups of each size that you're selling (i.e. smtCup, mdtCup, and lgtCup). I'm assuming that these variables mean the total number of cups for each size, you might want to put some comments during the variable declaration step. You'll want to initialise the variables to 0: int smtCup = 0; int mdtCup = 0; int lgtCup = 0; As this is a fairly simple program, you can perform accumulation without using your amtSold function, so you can delete that. Then, in case 1 of your switch statement, you'll want to update smtCup, mdtCup, and lgtCup every time you update the values. Please be aware that smCup, mdCup, and lgCup are used only for input in this program. cout << "How many small cups of coffee: "; cin >> smCup; cout << "How many medium cups of coffee: "; cin >> mdCup; cout << "How many large cups of coffee: "; cin >> lgCup; smtCup += smCup; mdtCup += mdCup; lgtCup += lgCup; From here on out, you can print out the total number of small, medium and large cups by calling smtCup, mdtCup, and lgtCup in the other cases! Change smCup, mdCup, and lgCup to smtCup, mdtCup, and lgtCup in cases 2-4. Hope this helps! Edit: Can't comment, so I'll just say you're welcome here!
Thanks KTing! It is disappointing to know I was much closer to a correct answer with an earlier version of my code. I could not figure out why it would not initialize and so I started to get desperate and try things I was 95% sure would not work. I ended up going with the following solution. #include <iostream> #include <iomanip> #include <fstream> #include <string> using namespace std; //Constant for size of cup of coffee const int SM_OZ = 8; const int MD_OZ = 12; const int LG_OZ = 16; //Constant for price of cup of coffee and Tax const double SM_PRICE = 1.19; const double MD_PRICE = 1.49; const double LG_PRICE = 1.89; const double TAX = .0825; int main() { //declare and initialize the variables for the individual cups of coffee int selection; int smCup = 0; int mdCup = 0; int lgCup = 0; //declare and initialize the variables for the total cups of coffee int smtCup = 0; int mdtCup = 0; int lgtCup = 0; do { //get input from user as to what they want to do cout << "COFFEE SHOP" << endl; cout << "1. Sell Coffee" << endl; cout << "2. Total Number of Cups Sold" << endl; cout << "3. Total Amount of Coffee Sold" << endl; cout << "4. Total Amount of Money made" << endl; cout << "0. Exit" << endl; cout << "Type a number to continue: "; cin >> selection; cout << endl; //loop through the solutions based on the user's selection switch (selection) { case 1: //get the number of cups of coffee from the user cout << "How many small cups of coffee: "; cin >> smCup; cout << "How many medium cups of coffee: "; cin >> mdCup; cout << "How many large cups of coffee: "; cin >> lgCup; //get the total cups of coffee and store it as a variable smtCup += smCup; mdtCup += mdCup; lgtCup += lgCup; system("cls"); cout << fixed << setprecision(2) << endl; //Sale Coffee Receipt Page cout << "COFFEE SHOP" << endl; cout << "SIZE" << setw(21) << "Number" << setw(18) << "Price" << setw(18) << "Total" << endl; cout << "Small: " << setw(18) << smCup << setw(18) << SM_PRICE << setw(18) << smCup*SM_PRICE << endl; cout << "Medium: " << setw(17) << mdCup << setw(18) << MD_PRICE << setw(18) << mdCup*MD_PRICE << endl; cout << "Large: " << setw(18) << lgCup << setw(18) << LG_PRICE << setw(18) << lgCup*LG_PRICE << endl; cout << "Subtotal: " << setw(51) << (smCup*SM_PRICE)+(mdCup*MD_PRICE)+(lgCup*LG_PRICE) << endl; cout << "Tax: (8.25%)" << setw(49) << ((smCup*SM_PRICE) + (mdCup*MD_PRICE) + (lgCup*LG_PRICE))*TAX << endl; cout << "Total: " << setw(54) << ((smCup*SM_PRICE) + (mdCup*MD_PRICE) + (lgCup*LG_PRICE))+(((smCup*SM_PRICE) + (mdCup*MD_PRICE) + (lgCup*LG_PRICE))*TAX) << endl; cout << endl; cout << endl; break; case 2: //Total Number of Cups Sold cout << "REPORT - NUMBER OF COFFEE CUPS SOLD" << endl; cout << "SIZE" << setw(21) << "Number" << endl; cout << "Small: " << setw(18) << smtCup << endl; cout << "Medium: " << setw(17) << mdtCup << endl; cout << "Large: " << setw(18) << lgtCup << endl; cout << endl; cout << endl; break; case 3: //Total Amount of Coffee Sold cout << "REPORT - AMOUNT OF COFFEE SOLD" << endl; cout << "SIZE" << setw(21) << "Number" << setw(18) << "OZ" << endl; cout << "Small: " << setw(18) << smtCup << setw(18) << smtCup*SM_OZ << endl; cout << "Medium: " << setw(17) << mdtCup << setw(18) << mdtCup*MD_OZ << endl; cout << "Large: " << setw(18) << lgtCup << setw(18) << lgtCup*LG_OZ << endl; cout << "Total: " << setw(36) << (smtCup*SM_OZ) + (mdtCup*MD_OZ) + (lgtCup*LG_OZ) << endl; cout << endl; cout << endl; break; case 4: //Total Amount of Money made cout << "COFFEE SHOP - REPORT MONEY MADE" << endl; cout << "SIZE" << setw(21) << "Number" << setw(18) << "Price" << setw(18) << "Total" << endl; cout << "Small: " << setw(18) << smtCup << setw(18) << SM_PRICE << setw(18) << smtCup*SM_PRICE << endl; cout << "Medium: " << setw(17) << mdtCup << setw(18) << MD_PRICE << setw(18) << mdtCup*MD_PRICE << endl; cout << "Large: " << setw(18) << lgtCup << setw(18) << LG_PRICE << setw(18) << lgtCup*LG_PRICE << endl; cout << "Subtotal: " << setw(51) << (smtCup*SM_PRICE) + (mdtCup*MD_PRICE) + (lgtCup*LG_PRICE) << endl; cout << "Tax: (8.25%)" << setw(49) << ((smtCup*SM_PRICE) + (mdtCup*MD_PRICE) + (lgtCup*LG_PRICE))*TAX << endl; cout << "Total: " << setw(54) << ((smtCup*SM_PRICE) + (mdtCup*MD_PRICE) + (lgtCup*LG_PRICE)) + (((smtCup*SM_PRICE) + (mdtCup*MD_PRICE) + (lgtCup*LG_PRICE))*TAX) << endl; cout << endl; cout << endl; break; case 0: system("cls"); break; default: //notify the user that an invalid selection has been inputted cout << "You have made an invalid selection. Please choose a number from the list." << endl; cout << endl; } //loop through if the user is still making a valid selection } while (selection != 0); system("pause"); return 0; }
How do I print an individual value from an array within text?
I'm trying to pull individual values from an array and put them into text, but keep running into errors with syntax. #include <iostream> #include <ostream> using namespace std; // PV, PM, FUE, RAP, PRE, SAB, ESP int luch_bas [7] = {6,3,5,3,2,1,2}; int main () { cout << "Tiene los atributos siguientes: \n"; cout << "Puntos de Vida (PV)... " luch_bas[0] "\n"; cout << "Puntos de Magia (PM)..." luch_bas[1] "\n"; cout << "Fuerza (FUE) ..." luch_bas[2] "\n"; cout << "Rapidez (RAP) ..." luch_bas[3] "\n"; cout << "Precisión (PRE) ..." luch_bas[4] "\n"; cout << "Sabiduría (SAB) ..." luch_bas[5] "\n"; cout << "Espíritu (ESP) ..." luch_bas[6] "\n"; } The error log I keep getting is "expected ';' before 'luch_bas'", but I'm not exactly sure where the missing ; is supposed to go? I'm sure there's a much better way to code this; I am still learning.
try this int main () { cout << "Tiene los atributos siguientes: \n"; cout << "Puntos de Vida (PV)... \t" << luch_bas[0]<< "\n"; ... }
The error log I keep getting is "expected ';' before 'luch_bas'", but I'm not exactly sure where the missing ; is supposed to go? You don't wan't to put a ; as the error message suggests. You want to chain the output operator calls respectively. The std::ostream& operator<<(std::ostream& os, Type t) returns a std::ostream& reference as you can see. The correct way is to chain the operator<<() calls: cout << "Puntos de Vida (PV)... " << luch_bas[0] << "\n"; // ^^ ^^
It should be: cout << "Tiene los atributos siguientes: \n"; cout << "Puntos de Vida (PV)... " << luch_bas[0] << endl; cout << "Puntos de Magia (PM)..." << luch_bas[1] << endl; cout << "Fuerza (FUE) ..." << luch_bas[2] << endl; cout << "Rapidez (RAP) ..." << luch_bas[3] << endl; cout << "Precisión (PRE) ..." << luch_bas[4] << endl; cout << "Sabiduría (SAB) ..." << luch_bas[5] << endl; cout << "Espíritu (ESP) ..." << luch_bas[6] << endl;
use more "streaming" operators #include <iostream> #include <ostream> using namespace std; // PV, PM, FUE, RAP, PRE, SAB, ESP int luch_bas [7] = {6,3,5,3,2,1,2}; int main () { cout << "Tiene los atributos siguientes: \n"; cout << "Puntos de Vida (PV)... " << luch_bas[0] << "\n"; cout << "Puntos de Magia (PM)..." << luch_bas[1] << "\n"; cout << "Fuerza (FUE) ..." << luch_bas[2] << "\n"; cout << "Rapidez (RAP) ..." << luch_bas[3] << "\n"; cout << "Precisión (PRE) ..." << luch_bas[4] << "\n"; cout << "Sabiduría (SAB) ..." << luch_bas[5] << "\n"; cout << "Espíritu (ESP) ..." << luch_bas[6] << "\n"; }
else if expected expression c++ / Xcode
I have seen this problem around the forum but I have not been able to fix this issue. After all "else if" Xcode can't compile, it tells me that it is a "parse issue" and that requieres an "expected expression". I know that it is a beginner's question but I truly want to understand what is wrong with my code, why it keeps telling me expected expression after each esle if... if (TypeStrat == 1) { cout << "Quel est le prix d'exercice du long Call ?" << endl; cin >> K1; cout << "Quel est le prix d'exercice du long Put ?" << endl; cin >> K2; cout << "Prix de la stratégie " << (BSPrixCall(S,K,T,r,v) + BSPrixPut(S,K,T,r,v)) << endl; cout << "Delta " << (BSDeltaCall(S,K,T,r,v) + BSDeltaPut(S,K,T,r,v)) << endl; cout << "Vega " << (2*BSVega(S,K,T,r,v)) << endl; cout << "Rho " << (BSRhoCall(S,K,T,r,v) + BSRhoPut(S,K,T,r,v)) << endl; cout << "Theta " << (BSThetaCall(S,K,T,r,v)/365.0) + (BSThetaPut(S,K,T,r,v)/365.0) << "journalier" << endl; else if (TypeStrat == 2) { cout << "Quel est le prix d'exercice du long Call ?" << endl; cin >> K1; cout << "Quel est le prix d'exercice du long Put ?" << endl; cin >> K2; cout << "Prix de la stratégie " << (BSPrixCall(S,K1,T,r,v) + BSPrixPut(S,K2,T,r,v)) << endl; cout << "Delta " << (BSDeltaCall(S,K1,T,r,v) + BSDeltaPut(S,K2,T,r,v)) << endl; cout << "Vega " << (BSVega(S,K1,T,r,v) + BSVega(S,K2,T,r,v)) << endl; cout << "Rho " << (BSRhoCall(S,K1,T,r,v) + BSRhoPut(S,K2,T,r,v)) << endl; cout << "Theta " << (BSThetaCall(S,K1,T,r,v)/365.0) + (BSThetaPut(S,K2,T,r,v)/365.0) << "journalier" << endl; } else if (TypeStrat == 3) { cout << "Quel est le prix d'exercice du long Call ?" << endl; cin >> K1; cout << "Quel est le prix d'exercice du short Call ?" << endl; cin >> K2; cout << "Prix de la stratégie " << (BSPrixCall(S,K1,T,r,v) - BSPrixCall(S,K2,T,r,v)) << endl; cout << "Delta " << (BSDeltaCall(S,K1,T,r,v) - BSDeltaCall(S,K2,T,r,v)) << endl; cout << "Vega " << (BSVega(S,K1,T,r,v) - BSVega(S,K2,T,r,v)) << endl; cout << "Rho " << (BSRhoCall(S,K1,T,r,v) - BSRhoCall(S,K2,T,r,v)) << endl; cout << "Theta " << (BSThetaCall(S,K1,T,r,v)/365.0) - (BSThetaCall(S,K2,T,r,v)/365.0) << "journalier" << endl; } else if (TypeStrat == 4) { cout << "Quel est le prix d'exercice du long Put ?" << endl; cin >> K1; cout << "Quel est le prix d'exercice du short Put ?" << endl; cin >> K2; cout << "Prix de la stratégie " << (BSPrixPut(S,K1,T,r,v) - BSPrixPut(S,K2,T,r,v)) << endl; cout << "Delta " << (BSDeltaPut(S,K1,T,r,v) - BSDeltaPut(S,K2,T,r,v)) << endl; cout << "Vega " << (BSVega(S,K1,T,r,v) - BSVega(S,K2,T,r,v)) << endl; cout << "Rho " << (BSRhoPut(S,K1,T,r,v) - BSRhoPut(S,K2,T,r,v)) << endl; cout << "Theta " << (BSThetaPut(S,K1,T,r,v)/365.0) - (BSThetaPut(S,K2,T,r,v)/365.0) << "journalier" << endl; } else if (TypeStrat == 5) { cout << "Quel est le prix d'exercice du long Call ?" << endl; cin >> K1; cout << "Quel est le prix d'exercice des deux short Call ?" << endl; cin >> K2; cout << "Prix de la stratégie " << (BSPrixCall(S,K1,T,r,v) - 2*BSPrixCall(S,K2,T,r,v)) << endl; cout << "Delta " << (BSDeltaCall(S,K1,T,r,v) - 2*BSDeltaCall(S,K2,T,r,v)) << endl; cout << "Vega " << (BSVega(S,K1,T,r,v) - 2*BSVega(S,K2,T,r,v)) << endl; cout << "Rho " << (BSRhoCall(S,K1,T,r,v) - 2*BSRhoCall(S,K2,T,r,v)) << endl; cout << "Theta " << (BSThetaCall(S,K1,T,r,v)/365.0) - 2*(BSThetaCall(S,K2,T,r,v)/365.0) << "journalier" << endl; } else if (TypeStrat == 6) { cout << "Quel est le prix d'exercice du long Put ?" << endl; cin >> K1; cout << "Quel est le prix d'exercice des deux short Put ?" << endl; cin >> K2; cout << "Prix de la stratégie " << (BSPrixPut(S,K1,T,r,v) - 2*BSPrixPut(S,K2,T,r,v)) << endl; cout << "Delta " << (BSDeltaPut(S,K1,T,r,v) - 2*BSDeltaPut(S,K2,T,r,v)) << endl; cout << "Vega " << (BSVega(S,K1,T,r,v) - 2*BSVega(S,K2,T,r,v)) << endl; cout << "Rho " << (BSRhoPut(S,K1,T,r,v) - 2*BSRhoPut(S,K2,T,r,v)) << endl; cout << "Theta " << (BSThetaPut(S,K1,T,r,v)/365.0) - 2*(BSThetaPut(S,K2,T,r,v)/365.0) << "journalier" << endl; } }
An else if requires a preceding if statement. The block of if statement that precedes your first else if is not closed, i.e. an ending curly brace } is missing. Also, there is an extra } in the end. Missing curly brace: if (TypeStrat == 1) { cout << "Quel est le prix d'exercice du long Call ?" << endl; cin >> K1; cout << "Quel est le prix d'exercice du long Put ?" << endl; cin >> K2; cout << "Prix de la stratégie " << (BSPrixCall(S,K,T,r,v) + BSPrixPut(S,K,T,r,v)) << endl; cout << "Delta " << (BSDeltaCall(S,K,T,r,v) + BSDeltaPut(S,K,T,r,v)) << endl; cout << "Vega " << (2*BSVega(S,K,T,r,v)) << endl; cout << "Rho " << (BSRhoCall(S,K,T,r,v) + BSRhoPut(S,K,T,r,v)) << endl; cout << "Theta " << (BSThetaCall(S,K,T,r,v)/365.0) + (BSThetaPut(S,K,T,r,v)/365.0) << "journalier" << endl; // } <-- Insert ending curly brace here else if (TypeStrat == 2) Extra curly brace: else if (TypeStrat == 6) { cout << "Quel est le prix d'exercice du long Put ?" << endl; cin >> K1; cout << "Quel est le prix d'exercice des deux short Put ?" << endl; cin >> K2; cout << "Prix de la stratégie " << (BSPrixPut(S,K1,T,r,v) - 2*BSPrixPut(S,K2,T,r,v)) << endl; cout << "Delta " << (BSDeltaPut(S,K1,T,r,v) - 2*BSDeltaPut(S,K2,T,r,v)) << endl; cout << "Vega " << (BSVega(S,K1,T,r,v) - 2*BSVega(S,K2,T,r,v)) << endl; cout << "Rho " << (BSRhoPut(S,K1,T,r,v) - 2*BSRhoPut(S,K2,T,r,v)) << endl; cout << "Theta " << (BSThetaPut(S,K1,T,r,v)/365.0) - 2*(BSThetaPut(S,K2,T,r,v)/365.0) << "journalier" << endl; } } // <-- Remove this extra curly brace
Looks like have a } in the wrong place. Is the following what you intended. Removed } from end and added before else if (TypeStrat == 2) if (TypeStrat == 1) { cout << "Quel est le prix d'exercice du long Call ?" << endl; cin >> K1; cout << "Quel est le prix d'exercice du long Put ?" << endl; cin >> K2; cout << "Prix de la stratégie " << (BSPrixCall(S,K,T,r,v) + BSPrixPut(S,K,T,r,v)) << endl; cout << "Delta " << (BSDeltaCall(S,K,T,r,v) + BSDeltaPut(S,K,T,r,v)) << endl; cout << "Vega " << (2*BSVega(S,K,T,r,v)) << endl; cout << "Rho " << (BSRhoCall(S,K,T,r,v) + BSRhoPut(S,K,T,r,v)) << endl; cout << "Theta " << (BSThetaCall(S,K,T,r,v)/365.0) + (BSThetaPut(S,K,T,r,v)/365.0) << "journalier" << endl; } else if (TypeStrat == 2) { cout << "Quel est le prix d'exercice du long Call ?" << endl; cin >> K1; cout << "Quel est le prix d'exercice du long Put ?" << endl; cin >> K2; cout << "Prix de la stratégie " << (BSPrixCall(S,K1,T,r,v) + BSPrixPut(S,K2,T,r,v)) << endl; cout << "Delta " << (BSDeltaCall(S,K1,T,r,v) + BSDeltaPut(S,K2,T,r,v)) << endl; cout << "Vega " << (BSVega(S,K1,T,r,v) + BSVega(S,K2,T,r,v)) << endl; cout << "Rho " << (BSRhoCall(S,K1,T,r,v) + BSRhoPut(S,K2,T,r,v)) << endl; cout << "Theta " << (BSThetaCall(S,K1,T,r,v)/365.0) + (BSThetaPut(S,K2,T,r,v)/365.0) << "journalier" << endl; } else if (TypeStrat == 3) { cout << "Quel est le prix d'exercice du long Call ?" << endl; cin >> K1; cout << "Quel est le prix d'exercice du short Call ?" << endl; cin >> K2; cout << "Prix de la stratégie " << (BSPrixCall(S,K1,T,r,v) - BSPrixCall(S,K2,T,r,v)) << endl; cout << "Delta " << (BSDeltaCall(S,K1,T,r,v) - BSDeltaCall(S,K2,T,r,v)) << endl; cout << "Vega " << (BSVega(S,K1,T,r,v) - BSVega(S,K2,T,r,v)) << endl; cout << "Rho " << (BSRhoCall(S,K1,T,r,v) - BSRhoCall(S,K2,T,r,v)) << endl; cout << "Theta " << (BSThetaCall(S,K1,T,r,v)/365.0) - (BSThetaCall(S,K2,T,r,v)/365.0) << "journalier" << endl; } else if (TypeStrat == 4) { cout << "Quel est le prix d'exercice du long Put ?" << endl; cin >> K1; cout << "Quel est le prix d'exercice du short Put ?" << endl; cin >> K2; cout << "Prix de la stratégie " << (BSPrixPut(S,K1,T,r,v) - BSPrixPut(S,K2,T,r,v)) << endl; cout << "Delta " << (BSDeltaPut(S,K1,T,r,v) - BSDeltaPut(S,K2,T,r,v)) << endl; cout << "Vega " << (BSVega(S,K1,T,r,v) - BSVega(S,K2,T,r,v)) << endl; cout << "Rho " << (BSRhoPut(S,K1,T,r,v) - BSRhoPut(S,K2,T,r,v)) << endl; cout << "Theta " << (BSThetaPut(S,K1,T,r,v)/365.0) - (BSThetaPut(S,K2,T,r,v)/365.0) << "journalier" << endl; } else if (TypeStrat == 5) { cout << "Quel est le prix d'exercice du long Call ?" << endl; cin >> K1; cout << "Quel est le prix d'exercice des deux short Call ?" << endl; cin >> K2; cout << "Prix de la stratégie " << (BSPrixCall(S,K1,T,r,v) - 2*BSPrixCall(S,K2,T,r,v)) << endl; cout << "Delta " << (BSDeltaCall(S,K1,T,r,v) - 2*BSDeltaCall(S,K2,T,r,v)) << endl; cout << "Vega " << (BSVega(S,K1,T,r,v) - 2*BSVega(S,K2,T,r,v)) << endl; cout << "Rho " << (BSRhoCall(S,K1,T,r,v) - 2*BSRhoCall(S,K2,T,r,v)) << endl; cout << "Theta " << (BSThetaCall(S,K1,T,r,v)/365.0) - 2*(BSThetaCall(S,K2,T,r,v)/365.0) << "journalier" << endl; } else if (TypeStrat == 6) { cout << "Quel est le prix d'exercice du long Put ?" << endl; cin >> K1; cout << "Quel est le prix d'exercice des deux short Put ?" << endl; cin >> K2; cout << "Prix de la stratégie " << (BSPrixPut(S,K1,T,r,v) - 2*BSPrixPut(S,K2,T,r,v)) << endl; cout << "Delta " << (BSDeltaPut(S,K1,T,r,v) - 2*BSDeltaPut(S,K2,T,r,v)) << endl; cout << "Vega " << (BSVega(S,K1,T,r,v) - 2*BSVega(S,K2,T,r,v)) << endl; cout << "Rho " << (BSRhoPut(S,K1,T,r,v) - 2*BSRhoPut(S,K2,T,r,v)) << endl; cout << "Theta " << (BSThetaPut(S,K1,T,r,v)/365.0) - 2*(BSThetaPut(S,K2,T,r,v)/365.0) << "journalier" << endl; }
Help implementing a "store buying" program
My professor instructed us to make a Starbucks like menu where the user can continue to input orders until they are finished. I got the menu display down along with the loop, but I can't get it to add up the orders that were inputted and display a total. #include <iostream> using namespace std; int main() { int choice = 1; cout << endl << "Welcome to Hunterbucks!"; while (choice > 0) { cout << endl << "Input -1 when you're finished ordering!"; cout << endl << endl << "Coffee" << " " << "($)"; cout << endl << "1. Regular" << " " << "1.50"; cout << endl << "2. Decaf" << " " << "1.23"; cout << endl << "3. Americano" << " " << "2.25"; cout << endl << "4. Espresso" << " " << "2.25"; cout << endl << "5. Latte" << " " << "2.50"; cout << endl << "6. Cappuccino" << " " << "2.75"; cout << endl << "7. Frappuccino" << " " << "2.75"; cout << endl << "8. Macchiato" << " " << "2.50"; cout << endl << endl << "Snacks" << " " << "($)"; cout << endl << "9. Muffin" << " " << "1.00"; cout << endl << "10. Blueberry Muffin" << " " << "1.25"; cout << endl << "11. Raspberry Muffin" << " " << "1.25"; cout << endl << "12. Scone" << " " << "0.75"; cout << endl << "13. Blueberry Scone" << " " << "1.00"; cout << endl << "14. Croissant" << " " << "0.75"; cout << endl << endl << "What would you like to order? "; cin >> choice; if (choice <= 0) cout << endl << "Thank you for your order."; else cout << endl << "What else would you like to order?"; } cout << endl << "Thank you for choosing Hunterbucks! Come again soon."; return 0; } Any info that can help me? I'm just a beginner and have been trying this for a few hours.
In pseudo-code you want something like this: float total = 0.0; while (choice > 0) { .... cin >> choice; if (choice <= 0) cout << endl << "Thank you for your order."; else { total += costs[choice]; cout << endl << "What else would you like to order?"; } } You'll need to define an array names costs that contains the cost of each item. You'll also want to tackle validation of the user input so that you don't erroneously attempt to read outside the range of the costs array.
You're probably looking at something like this: #include <iostream> using namespace std; int main() { int choice = 1; float sum = 0.0; float arr[] = { 0.00, 1.50, 1.23, 2.25, 2.25, 2.50, 2.75, 2.75, 2.50, 1.00, 1.25, 1.25, 0.75, 1.00, 0.75 }; cout << endl << "Welcome to Hunterbucks!"; while (choice > 0) { cout << endl << "Input -1 when you're finished ordering!"; cout << endl << endl << "Coffee" << " " << "($)"; cout << endl << "1. Regular" << " " << "1.50"; cout << endl << "2. Decaf" << " " << "1.23"; cout << endl << "3. Americano" << " " << "2.25"; cout << endl << "4. Espresso" << " " << "2.25"; cout << endl << "5. Latte" << " " << "2.50"; cout << endl << "6. Cappuccino" << " " << "2.75"; cout << endl << "7. Frappuccino" << " " << "2.75"; cout << endl << "8. Macchiato" << " " << "2.50"; cout << endl << endl << "Snacks" << " " << "($)"; cout << endl << "9. Muffin" << " " << "1.00"; cout << endl << "10. Blueberry Muffin" << " " << "1.25"; cout << endl << "11. Raspberry Muffin" << " " << "1.25"; cout << endl << "12. Scone" << " " << "0.75"; cout << endl << "13. Blueberry Scone" << " " << "1.00"; cout << endl << "14. Croissant" << " " << "0.75"; cout << endl << endl << "What would you like to order? "; cin >> choice; if (choice <= 0){ cout << endl << "Thank you for your order."; } else { cout << endl << "What else would you like to order?"; sum += arr[choice]; } } cout << "Total: " << sum << endl; cout << endl << "Thank you for choosing Hunterbucks! Come again soon."; return 0; } Do note the following: 1) Your menu choices being with '1' thus there is a need to offset your arr at index '0' with the '0.00' value there. 2) The cost added up follows that of your indexed array, thus you would probably want to format your output according to your array, so that next time, all you need to do is to update your array. Hope it helped. Cheers!
The way you have your code set up warrants a switch statement, like the following: double total = 0; switch (choice) { case 1: total += 1.50; // Regular. break; case 2: total += 1.23; // Decaf. break; // Etc. } cout << endl << "Your total is " << total; That being said, the easiest way to do this would be to have an array of prices: double prices[] = {1.50, 1.23, 2.25}; // ... total += prices[choice - 1]; // No switch statement needed.