время печати в std :: ostream - PullRequest
       21

время печати в std :: ostream

3 голосов
/ 09 февраля 2012

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

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

Введите количество часов: 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)?

Спасибо.

Ответы [ 4 ]

5 голосов
/ 09 февраля 2012

Вы можете включить <iomanip> и установить ширину поля и 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; в небольших областях, чтобы другие функции и другие файлы не были затронуты.

1 голос
/ 09 февраля 2012

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

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

Ваша функция main () не должна делать ничего, кроме ...

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

  time(hour, min);

  return 0;
}

и затем вернитесь.

0 голосов
/ 09 февраля 2012

Ваш код в main предполагает, что 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;     
}

а Боб чей-то дядя.

0 голосов
/ 09 февраля 2012

Первый раз () должен вернуть std :: string. Для форматирования строки внутри time () вы можете использовать std :: ostringstream (заголовок sstream).

Например:

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

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

...