2016-04-14 8 views
-1

アルバムの12曲を数分入力して2分単位で入力し、両者の適切な配列に格納してからアルバムの長さを返すプログラムを作成しています。平均的な曲の長さ、最短の曲、最長の曲です。私の現在のコードのほとんどすべてがうまくいっていますが、私の数字が正しいということでいくつかの深刻な問題があります。フォーマットするときに、ちょうど秒にフォーマットし、セミコロンと1桁の数字の前に0をつけるようにフォーマットされている間は、分と秒に戻ります。詳しい説明は添付の画像をご覧ください。ここで数字を失う/変更する数値

enter image description here

コードは次のとおりです。

#include <iostream> 
#include <iomanip> 
#include <string> 

using namespace std; 
void displayTime(int); 

int main() 
{ 
    const int SIZE = 12; 
    int mins[SIZE], secs[SIZE],minsToSecs[SIZE], totalSecs[SIZE]; 
    int count = 0; 
    int shortest, longest, totalAlbumLength, averageLengthOfTracks; 


    cout << "Welcome to my Album Length Calculator" << endl; 
    cout << "Please enter all track lengths in minutes and seconds" << endl; 
    cout << "seperated by a space." << endl; 


    while (count < SIZE) 
    { 
     cout << "Track " << count + 1 << ": "; 
     cin >> mins[count]; 
     cin >> secs[count]; 
     count++; 
    } 


    for (int i = 0; i < SIZE; i++) 
    { 
     minsToSecs[i] = mins[i] * 60; 
    } 


    for (int i = 0; i < SIZE; i++) 
    { 
     totalSecs[i] = minsToSecs[i] + secs[i]; 
    } 


    shortest = totalSecs[0]; 
    for (int i = 0; i < SIZE; i++) 
     if (shortest > totalSecs[i]) 
      shortest = totalSecs[i]; 


    longest = totalSecs[0]; 
    for (int i = 0; i < SIZE; i++) 
     if (longest < totalSecs[i]) 
      longest = totalSecs[i]; 


    totalAlbumLength = 0; 
    for (int i = 0; i < SIZE; i++) 
     totalAlbumLength += totalSecs[i]; 


    averageLengthOfTracks = totalAlbumLength/SIZE; 


    cout << "The Shortest track was "; 
     displayTime(shortest); 


    cout << "The Longest track was "; 
     displayTime(longest); 


    cout << "The Total Album Length was "; 
     displayTime(totalAlbumLength); 


    cout << "The Average Track Length was "; 
     displayTime(averageLengthOfTracks); 


    system("PAUSE"); 
    return 0; 
} 
void displayTime(int input) 
{ 
    int mins, secs; 
    mins = input/60; 
    secs = input % 60; 

    cout << mins << " : " << setfill('0') << setw(2) << mins << endl; 
} 

は私が単に見落としてきたことを、ここで見つからないか、いくつかの簡単なのです何かがありますか?

+2

ようこそスタックオーバーフロー!デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。さらに読む:** [小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

+0

'SIZE'を1または2にするあなたのプログラムをデバッグしてください。このエラーを表示するには、12個の項目は必要ありません。また、[あなたのプログラムのこの最小化バージョン](http://ideone.com/lzevHj)は、ここでテストして投稿した[mcve]の例です。 – PaulMcKenzie

答えて

0

これは単純なタイプミスです。分と秒を計算してから、mins : minsのみを出力しています。

変更するには、displayTime()関数の最後の行:

cout << mins << " : " << setfill('0') << setw(2) << secs << endl; 

私はあなたの出力を見ることでこれを見つけたことを言及する必要があります。あなたがプリントアウトしていた数字のすべてが「x:x」であることを見て、何かが誤って2回コピーされたと思わせました。あなたのdisplayTime関数を見ると、私に問題が示されました。 @ NathanOliverが述べたように、デバッガは、この問題を自分で把握しようとするときに本当に便利なツールになります。

+0

ありがとうございます。私はそれを見落としたとは信じられません... –

関連する問題