2016-04-14 6 views
-1

Ich erstelle gerade ein Programm, das die Eingabe von 12 Songs auf einem Album als zwei Sätze eingegebener Nummern als Minuten und Sekunden aufnehmen soll, speichert sie in geeigneten Arrays für beide und gibt dann die Länge des Albums zurück. die durchschnittliche Songlänge, der kürzeste Song und der längste Song. So ziemlich all mein aktueller Code läuft gut, aber ich habe einige ernsthafte Schwierigkeiten mit meinen Zahlen, die korrekt sind. Immer, wenn ich formatiere, um nur ein paar Sekunden, und zurück zu Minuten und Sekunden, während sie formatiert, um ein Semikolon und eine 0 vor einer einstelligen Sekunde zu haben, scheinen sie zu ändern. Bitte beachten Sie das beigefügte Bild für weitere Erläuterungen. HierZahlen, die Werte verlieren/ändern

enter image description here

ist der Code:

#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; 
} 

Gibt es etwas, das ich hier fehlt oder einige einfach, dass ich einfach übersehen?

+2

Willkommen bei Stack Overflow! Es klingt, als müssten Sie lernen, wie Sie einen Debugger verwenden, um durch Ihren Code zu gehen. Mit einem guten Debugger können Sie Ihr Programm Zeile für Zeile ausführen und sehen, wo es von dem, was Sie erwarten, abweicht. Dies ist ein essentielles Werkzeug, wenn Sie programmieren wollen. Weiterführende Literatur: ** [Wie kleine Programme zu debuggen] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver

+0

Make "SIZE" gleich 1 oder 2 und debugge dein Programm. Sie benötigen keine 12 Artikel, um den Fehler zu sehen. Außerdem ist [diese minimierte Version Ihres Programms] (http://ideone.com/lzevHj) ein Beispiel für eine [mcve], die Sie hier getestet und gepostet haben könnten. – PaulMcKenzie

Antwort

0

Dies ist ein einfacher Tippfehler. Sie berechnen Minuten und Sekunden und geben nur mins : mins aus.

Ändern Sie die letzte Zeile Ihrer displayTime() Funktion:

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

Ich sollte erwähnen, dass ich dies bei Ihrer Ausgabe von der Suche gefunden. Wenn Sie sehen, dass alle Zahlen, die Sie ausgedruckt haben, "x: x" waren, habe ich vermutet, dass etwas versehentlich zweimal kopiert wurde. Ein Blick auf die displayTime-Funktion hat mir das Problem gezeigt. Wie @NathanOliver sagte, kann ein Debugger ein wirklich nützliches Werkzeug sein, um dieses Problem selbst zu lösen.

+0

Danke. Ich kann nicht glauben, dass ich das übersehen habe ... –