2016-04-14 37 views
-1

Şu anda bir albümde 12 şarkının girişini dakikalar ve saniyeler olarak iki girişli dizi olarak almayı, her ikisi için uygun dizilerde saklamayı ve sonra albümün uzunluğunu döndürmeyi amaçlayan bir program oluşturuyorum. ortalama şarkı uzunluğu, en kısa şarkı ve en uzun şarkı. Şu andaki kodumun tamamı iyi gidiyor, ancak rakamlarımın doğru olması konusunda ciddi bir zorluk yaşıyorum. Ne zaman bir kaç saniyeyi biçimlendirdiğimde ve bir saniye önce bir noktalı virgül olacak şekilde biçimlendirilirken, saniyeler içinde ve dakikalara ve saniyelere geri döndüğümde, bunlar değişmiş gibi görünüyor. Daha fazla açıklama için lütfen ekli resme bakınız.Numaraları kaybetme/değiştirme

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

Burada eksik veya basitçe göz ardı ettik bazı basit bir şey var mı: İşte

enter image description here

Kod nedir?

+2

Yığın Taşmasına Hoş Geldiniz! Kodunuzda ilerlemek için bir hata ayıklayıcısını nasıl kullanacağınızı öğrenmeniz gerekebilir gibi geliyor. İyi bir hata ayıklayıcı ile, program satırınızı istediğiniz gibi çalıştırabilir ve beklediğiniz yerden saptırabilirsiniz. Herhangi bir programlama yapacaksanız bu önemli bir araçtır. Daha fazla okuma: ** [Küçük programları hata ayıklama] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver

+0

"SIZE" öğesini 1 veya 2'ye eşit yapın ve programınızı debug. Hatayı görmek için 12 öğeye ihtiyacınız yok. Ayrıca, [programınızın bu küçültülmüş sürümü] (http://ideone.com/lzevHj) burada test edip gönderebileceğiniz bir [mcve] örneğidir. – PaulMcKenzie

cevap

0

Bu basit bir yazım hatasıdır. Dakikalar ve saniyeler hesaplıyorsunuz ve daha sonra sadece mins : mins çıktısını alıyorsunuz.

Değişim için displayTime() fonksiyonunun son satırı:

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

ben senin çıkışında bakarak buldum bahsetmeliyiz. Yazdırdığınız tüm sayıların "x: x" olduğunu görerek, bir şeyin yanlışlıkla iki kez kopyalandığından şüphelenmemizi sağladı. DisplayTime işlevinize bakarak bana sorun gösterdi. @NathanOliver'in dediği gibi, bir hata ayıklayıcısı bu sorunu kendiniz çözmeye çalışırken kullanmanız için gerçekten yararlı bir araç olabilir.

+0

Teşekkür ederim. Gözardı ettiğime inanamıyorum ... –