2012-02-08 2 views
3

Я только что начал читать учебник на C++, и мне трудно решить одну из проблем с кодированием в конце главы. Возникает вопрос:Время печати до std :: ostream

Запишите программу, которая просит пользователя ввести значение часа и значение минуты. Основная функция () должна затем передать эти два значения в пустотах функции типа, который отображает два значения в формате, показанном в следующем периоде выборки:

Введите количество часов: 9
Введите число мин: 28
Время: 9:28

мой код до сих пор:

#include <iostream> 
using namespace std; 
void time(int h, int m); 

int main() 
{ 
    int hour, min; 

    cout << "enter the number of hours: "; 
    cin >> hour; 
    cout << "enter the number of minutes: "; 
    cin >> min; 

    string temp = time(hour, min); 

    cout << temp; 

    return 0; 
} 

void time(int h, int m) 
{ 
    string clock; 
    clock = 
} 

Что мне теперь делать внутри функции time(n, m)?

Спасибо.

+0

http: //www.cplusplus.com/reference/clibrary/cstdio/printf/ –

+7

, пожалуйста, не добавляйте как printfs, так и couts. придерживайтесь одного, предпочтительно, couts в C++ – jglouie

ответ

5

Вы можете включить <iomanip> и установить field width и fill так, чтобы время как 9:01 было напечатано правильно. А так как функция time должна просто распечатать время, здание и возврат std::string можно опустить. Просто распечатайте эти значения:

void time(int hour, int min) 
{ 
    using namespace std; 
    cout << "Time: " << hour << ':' << setfill('0') << setw (2) << min << endl; 
} 

отметить также, что написание using namespace std; в начале ваших файлов считается плохой практикой, так как это вызывает некоторые определяемые пользователем имена (типов, функций и т.д.), чтобы стать неоднозначным. Если вы хотите избежать исчерпывающего префикса std::, используйте using namespace std; в небольших областях, чтобы другие функции и другие файлы не были затронуты.

+0

, что о двухзначной минуте? например 9:01 будет 9: 1 – jglouie

+0

Хорошо. Я отредактировал свой ответ. – LihO

+0

спасибо за помощь! – Jay

0

Первый раз() должен возвращать std :: string. Чтобы форматировать строку внутри time(), вы можете использовать std :: ostringstream (header sstream).

Например:

std::string time(int hour, int minutes) 
{ 
    std::ostringstream oss; 
    oss << hour << ":" << minutes; 
    return oss.str(); 
} 

Edit: Конечно, вы можете также распечатать часы и минуты непосредственно внутри времени (..) функции. Или вы можете передать функцию времени (..) также аргументом потока, чтобы дать время (..) распечатать его в этом потоке.

0

Ваш основной код предполагает, что time - это метод string, в котором говорится: void. Ваш код должен быть:

#include <iostream> 
using namespace std; 
void time(int h, int m); 

int main() 
{ 
    int hour, min; 

    cout << "enter the number of hours: "; 
    cin >> hour; 
    cout << "enter the number of minutes: "; 
    cin >> min; 

    // Now pass to your time method. 
    time(hour, min); 

    return 0; 
} 

void time(int h, int m)  
{  
    cout << "Time: " << h << ':' << m << endl;  
} 

и Bob - это чей-то дядя.

1

на вопрос запросов «тип аннулируются функция, которая отображает два значения в формате, показанном» поэтому наиболее простой и правильный (потому что это соответствует тому, что было предложено) решение:

void time(int h, int m) 
{ 
    cout << "Time: " << h << ":" << m << endl; 
} 

основной() функция тогда должна ничего не делать, кроме как ...

// ... prompt for values as before, then: 

    time(hour, min); 

    return 0; 
} 

, а затем вернуться.