mahmoud1998 Ответов: 1

Как изменить этот код, чтобы получить номер дня недели и пройденных часов ?


#include <iostream>
    #include<cmath>
    #include<ctime>
    #include<string>
    #include <iomanip>
    #include <fstream>
  
    using namespace std;
    
    string today(int day, string todayName);
    int hourLeft(int hour);
    
    
    int main()
    {
    	int day,hour;
    	cin >> day>>hour;
    
    	string dayName;
    	cout << today(day, dayName) << endl;
    	cout << hourLeft(hour) << endl;
    }
    string today(int day, string todayName)
    {
    	switch (day)
    	{
    	case 1: return todayName = "sunday";
    		break;
    	case 2: return todayName = "monday";
    		break;
    	case 3: return todayName = "tuesday";
    		break;
    	case 4: return todayName = "wednesday";
    		break;
    	case 5:return  todayName = "thursday";
    		break;
    	case 6: return todayName = "friday";
    		break;
    	case 7:return  todayName = "saturday";
    		break;
    	}
    }
    int hourLeft(int hour)
    {
    	int theHourLeft = 24 - hour;
    	return theHourLeft;
    }


Что я уже пробовал:

Редактирование (CHill60) чистые убранные линии. Смотрите выше код

Richard MacCutchan

В чем именно заключается проблема?

KarstenK

Вопрос остается неясным.

jeron1

В дополнение к тому, что написал Грег Утас, вы должны квалифицировать свои входные данные. Если пользователь вводит " 10 "для переменной дня или "19722" для переменной часа, ваш код должен где-то обрабатывать ее, иначе вы получите операцию, которую не ожидали или не хотели. Во многих случаях также рекомендуется иметь оператор default: в операторе switch для работы с данными, не обрабатываемыми операторами case:.

1 Ответов

Рейтинг:
1

Greg Utas

Я догадываюсь, в чем дело. Я не знаю что именно

return todayName = "dayname";
он собирается вернуться, но я думаю, что это будет не то, что вы хотите. todayName не обязательно быть параметром для этой функции. Это уже возвращает string, так что просто напишите
return "dayname";
во всех этих местах. Тебе даже не нужно это делать. break заявления, которые следуют, и ваши main функция будет просто делать
cout << today(day) << endl;
Если вы действительно хотите обновить dayName локальная переменная в main, вы должны были бы заявить о своем today функция как
void today(int day, string& todayName)
Обратите внимание на &, который сообщает коду обновить аргумент, передаваемый в функцию вместо того чтобы работать с копией, которая теряется при возврате функции При таком подходе, main нужно было бы это сделать
today(day, dayName);
cout << dayName << endl;