我剛剛學習C++,並創建了一個簡單的計算器程序。針對這一點,我有幾個問題:首先,我能做些什麼來清理它,或使它變得更好?其次,在此代碼中,我使用goto
語句返回到程序的開頭。我聽說goto
被許多程序員看不起,因爲它可以創建「意大利麪條」代碼。有沒有什麼我可以做不使用goto
,而是一種什麼樣的?最後,我coppied的代碼從互聯網上一行:如何在C++中使用std :: transform?
std::transform(returnToMain.begin(), returnToMain.end(), returnToMain.begin(), ::toupper);
有人能向我解釋這是什麼呢?據我所知,transform
和
::toupper
但不是.begin()
和.end()
這裏是我完整的代碼,並感謝大家的幫助:
#include <iostream>
#include <stdlib.h>
#include <string>
#include <cmath>
#include <algorithm>
using namespace std;
void showMenu();
unsigned long facInput; //Prototyping functions
int getInput();
float additionGetInput();
float subtractionGetInput();
float multiplicationGetInput();
float divisionGetInput();
unsigned long long factorialInput(unsigned long long facInput);
float hypotenuseFinder();
class prompt //Class so I don't have to repeatedly type the prompt.
{
public:
prompt()
{
inputPromptOne = "\nEnter float one: ";
inputPromptTwo = "\nEnter float two: ";
}
string inputPromptOne;
string inputPromptTwo;
};
string returnToMain;
prompt prompt;
int main()
{
startOfProgram: //Label for goto function.
system("CLS");
showMenu();
int userInput = getInput();
switch(userInput)
{
case 1: //Addition
system("CLS");
cout << "You chose the Addition Calculator." << endl;
cout << "The sum is: " << additionGetInput() << endl;
cout << "\n\nEnter 'quit' to return to menu: ";
cin >> returnToMain;
transform(returnToMain.begin(), returnToMain.end(), returnToMain.begin(), ::toupper);
if(returnToMain == "QUIT")
{
goto startOfProgram;
}
break;
case 2: //Subtraction
system("CLS");
cout << "You chose the Subtraction Calculator." << endl;
cout << "The difference is: " << subtractionGetInput() << endl;
cout << "\n\nEnter 'quit' to return to menu: ";
cin >> returnToMain;
transform(returnToMain.begin(), returnToMain.end(), returnToMain.begin(), ::toupper);
if(returnToMain == "QUIT")
{
goto startOfProgram;
}
break;
case 3: //Multiplication
system("CLS");
cout << "You chose the Multiplication Calculator." << endl;
cout << "The product is: " << multiplicationGetInput() << endl;
cout << "\n\nEnter 'quit' to return to menu: ";
cin >> returnToMain;
transform(returnToMain.begin(), returnToMain.end(), returnToMain.begin(), ::toupper);
if(returnToMain == "QUIT")
{
goto startOfProgram;
}
break;
case 4: //Division
system("CLS");
cout << "You chose the Division Calculator." << endl;
cout << "The quotient is: " << divisionGetInput() << endl;
cout << "\n\nEnter 'quit' to return to menu: ";
cin >> returnToMain;
transform(returnToMain.begin(), returnToMain.end(), returnToMain.begin(), ::toupper);
if(returnToMain == "QUIT")
{
goto startOfProgram;
}
break;
case 5:
system("CLS"); //Factorial Finder
cout << "You chose the Factorial Calculator." << endl;
cout << "Enter a number (MAX 65): ";
cin >> facInput;
cout << "The factorial is: " << factorialInput(facInput) << endl;
cout << "\n\nEnter 'quit' to return to menu: ";
cin >> returnToMain;
transform(returnToMain.begin(), returnToMain.end(), returnToMain.begin(), ::toupper);
if(returnToMain == "QUIT")
{
goto startOfProgram;
}
break;
case 6: //Pythagorean Theorem
system("CLS");
cout << "You chose the Pythagorean Theorem Calculator." << endl;
cout << "Length of side c (hypotenuse): " << hypotenuseFinder() << endl;
cout << "\n\nEnter 'quit' to return to menu: ";
cin >> returnToMain;
transform(returnToMain.begin(), returnToMain.end(), returnToMain.begin(), ::toupper);
if(returnToMain == "QUIT")
{
goto startOfProgram;
}
break;
default:
cout << "That is an invalid function. Try again." << endl;
goto startOfProgram;
}
}
void showMenu()
{
cout << "1-Addition" << endl;
cout << "2-Subtraction" << endl;
cout << "3-Multiplication" << endl;
cout << "4-Division" << endl;
cout << "5-Factorial" << endl;
cout << "6-Pythagorean Theorem" << endl;
cout << "---------------------" << endl;
}
int getInput()
{
int userInput;
cout << "Choose a function: ";
cin >> userInput;
return userInput;
}
float additionGetInput()
{
float addInput1;
float addInput2;
cout << prompt.inputPromptOne;
cin >> addInput1;
cout << prompt.inputPromptTwo;
cin >> addInput2;
system("CLS");
float sum = addInput1 + addInput2;
return sum;
}
float subtractionGetInput()
{
float subInput1;
float subInput2;
cout << prompt.inputPromptOne;
cin >> subInput1;
cout << prompt.inputPromptTwo;
cin >> subInput2;
system("CLS");
float difference = subInput1 - subInput2;
return difference;
}
float multiplicationGetInput()
{
float mulInput1;
float mulInput2;
cout << prompt.inputPromptOne;
cin >> mulInput1;
cout << prompt.inputPromptTwo;
cin >> mulInput2;
system("CLS");
float product = mulInput1 * mulInput2;
return product;
}
float divisionGetInput()
{
float divInput1;
float divInput2;
cout << prompt.inputPromptOne;
cin >> divInput1;
cout << prompt.inputPromptTwo;
cin >> divInput2;
system("CLS");
float quotient = divInput1/divInput2;
return quotient;
}
unsigned long long factorialInput(unsigned long long facInput)
{
if(facInput==1)
{cout << "---------------------" << endl;
return 1;
}
else
{
return facInput*factorialInput(facInput-1);
}
}
float hypotenuseFinder()
{
float a;
float b;
cout << "Enter length of side a: ";
cin >> a;
cout << "\nEnter length of side b: ";
cin >> b;
float hypotenuse = sqrt(pow(a, 2) + pow(b, 2));
return hypotenuse;
}
您是否閱讀過[documentation](http://en.cppreference.com/w/cpp/algorithm/transform)?如果是這樣,你還不清楚什麼?它解釋瞭如何使用'begin'和'end'迭代器。 –
閱讀關於C++的任何教程可能會幫助你學習'while'和'for'循環。 '.begin()'和'.end()'是用於迭代器的,很可能在任何好的教程中都會介紹。 – Kupiakos
檢查這一個http://www.cprogramming.com/tutorial/stl/iterators.html – user3159253