数字丢失/改变价值观

时间:2016-04-14 16:49:44

标签: c++ arrays int

我目前正在创建一个程序,用于在一张专辑中输入12首歌曲作为两组输入数字作为分钟和秒,将它们存储在适当的数组中,然后返回专辑的长度,平均歌曲长度,最短的歌,最长的歌。几乎所有我目前的代码都运行良好,但是我的数字是正确的,我遇到了一些严重的困难。每当我将格式化为几秒钟,然后返回分钟和秒钟,同时格式化为分号和前面的单个数字前面的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;
}

我有什么东西可以在这里找到,或者有些简单的东西我只是忽略了吗?

1 个答案:

答案 0 :(得分:0)

这是一个简单的拼写错误。您正在计算分钟和秒,然后仅输出mins : mins

displayTime()功能的最后一行更改为:

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

我应该提一下,我通过查看你的输出找到了这个。看到你打印出的所有数字都是&#34; x:x&#34;让我怀疑有些东西被意外复制了两次。看看你的displayTime函数向我展示了这个问题。正如@NathanOliver所说,调试器在尝试自己解决这个问题时可以是一个非常有用的工具。