Я нуб C ++, довольно новый для языка. Я пытаюсь написать программу, которая рассчитывает время в других часовых поясах США на основе вашего текущего времени. Я написал некоторое время l oop в void-функции, но операторы if, используемые для поддержания часов в диапазоне (1 - 12), не работают. Если вы выберете время и зону, которые не будут изменены, например, 8:35 вечера по восточному времени, это будет работать просто отлично. Однако, если часы go больше 12 или меньше 0, операторы if ничего не делают. Я пытался положить их снаружи, пока я oop. Я также пытался сделать для l oop. Решение, вероятно, очень простое для всех вас, но любая помощь будет очень признательна. Вот моя программа:
#include <iostream>
#include <vector>
// to be used when input is invalid (duh)
void invalid()
{
for(int i; i < 40; i++)
{
std::cout << "\n";
}
std::cout << "Invaild input.\n\n";
}
// switches am to pm to match the cycle (I had to put in the equal sign because 12 changes to cycle, but it still a valid hour, so I couldn't change the if statement's parameters)
void amstay(bool x, int y)
{
if (x == true && y >= 12)
{
std::cout << " PM";
}
else if(x == false && y >= 12)
{
std::cout << " AM";
}
}
void amswitch(bool x, int y)
{
if (x == true && y >= 12)
{
std::cout << " PM";
}
else if(x == false && y >= 12)
{
std::cout << " AM";
}
}
// used to display the zone's time
void finTimeDisplay(int h, int m, bool a, int x)
{
int i;
// Had to use an array because vectors weren't working for some reason :/
std::string altZoneDisplay [4] = {"Pacific Time: ","\nMountain Time: ","\nCentral Time: ","\nEastern Time: "};
//got to return to the while loop
whileloop:
// displays the vector and return the hours plus the index it is on (and the minute) when the hours are valid
while(h <= 12 && h > 0 && i < 4)
{
std::cout << altZoneDisplay[i] << (h + i) + x<< ":" << m;
i++;
// returns hours to the beginning of it's cycle (1)
if (h > 12)
{
h = (h - 12) + x;
std::cout << altZoneDisplay[i] << h + i << ":" << m;
amswitch(a, h);
goto whileloop;
}
// returns hours to the end of it's cycle
else if (h < 0)
{
std::cout << altZoneDisplay[i] << h + 12 << ":" << m;
amswitch(a, h);
goto whileloop;
}
}
}
int main()
{
// to add to hours (if you pick mountain, central, or eastern zones, you must have a lesser value for i or else it will register your time for pacific every time)
int iAdd0 = 0;
int iAdd1 = -1;
int iAdd2 = -2;
int iAdd3 = -3;
int minutes;
int hours;
std::string amOrPm;
bool am;
int zone;
std::vector<std::string> zoneDisplay (4);
zoneDisplay.push_back ("\n1. Pacific");
zoneDisplay.push_back ("\n2. Mountain");
zoneDisplay.push_back ("\n3. Central");
zoneDisplay.push_back ("\n4. Eastern");
zonepick:
std::cout << "\nUS Time Zone Converter\n\n================\n\nEnter a Timezone:";
// for loop for display and goto for invalid input
display:
for(int i; i<zoneDisplay.size(); i++)
{
std::cout << zoneDisplay[i] << "\n";
}
std::cout << "\n";
std::cin >> zone;
if(zone != 1 && zone != 2 && zone != 3 && zone != 4) {
invalid();
goto display;
}
// goto for invalid input
hourspick:
std::cout << "\nEnter the time (hours): ";
std::cin >> hours;
if (hours > 12)
{
invalid();
goto hourspick;
}
// goto for invalid input
minutespick:
std::cout << "\nEnter the time (minutes): ";
std::cin >> minutes;
if (minutes > 60)
{
invalid();
goto minutespick;
}
// goto for invalid input
ampmcycle:
std::cout << "\nAM or PM? ";
std::cin >> amOrPm;
if (amOrPm == "am" || amOrPm == "AM")
{
am = true;
}
else if (amOrPm == "pm" || amOrPm == "PM")
{
am = false;
}
else {
invalid();
goto ampmcycle;
}
// didn't use booleans because that would waste space
for (int i; i < 4; i++) {
if (zone == i) {
}
}
if (zone == 1)
{
finTimeDisplay(hours, minutes, am, iAdd0);
}
else if (zone == 2)
{
finTimeDisplay(hours, minutes, am, iAdd1);
}
else if (zone == 3)
{
finTimeDisplay(hours, minutes, am, iAdd2);
}
else if (zone == 4) {
finTimeDisplay(hours, minutes, am, iAdd3);
}
/*
I thought this would work as a replacement for the if statements above. It didn't.
for (int i; i < 4; i++)
{
if (zone == i) {
finTimeDisplay(hours, minutes, am, iAdds.at(i));
}
}
*/
}