C++中的数组存在问题

Having Problems with Arrays in C++

本文关键字:存在 问题 数组 C++      更新时间:2023-10-16

我在编码这件事时遇到了麻烦,但我想我已经掌握了大部分。我就是记不清时间。有人能帮忙吗。

编写执行以下操作的C++代码:

•显示一条包含您姓名的欢迎信息。

•提示并读取专辑中12首曲目的长度(以分和秒为单位(。

•将每条轨道的长度以秒为单位存储在阵列中。(注意:总秒数可以通过将分钟乘以60并将秒数相加来计算。(

•计算并显示以下内容:

–专辑中最短的曲目及其长度。–专辑中最长的曲目及其长度。

–整个相册的总运行时间。

–专辑中曲目的平均长度。

•在输出中,所有时间都应采用标准的分秒格式,中间有一个冒号。这应该通过以下原型的void函数来完成:

void displayTime(int totalSeconds(;

可以使用/和%运算符计算分钟数。请注意,如果秒数小于10,则此函数必须在冒号后显示一个额外的零。例如,总长度为185秒的曲目的长度应显示为3:05。

它应该是这样的。

轨道1:3 25

轨道2:456

一直到12岁。

这就是我到目前为止所拥有的。

#include <iostream>
#include <iomanip>
using namespace std;
void displayTime(int totalSeconds);
int main()
{
const int SIZE = 12;
float Tracks[SIZE];
int cnt = 0;
int TrackHigh;
int TrackLow;
int totalSeconds;

cout << "Welcome to Jalen Keller's Album Length Calculator." << endl;
cout << "Please enter all track lengths in minutes and seconds separated by a space." << endl;
while (Tracks[cnt] != -1 && cnt < SIZE)
{
cout << "Track " << cnt + 1 << ": ";
cin >> Tracks[cnt];
cnt++;
}
TrackHigh = Tracks[0];
for (cnt = 0; cnt < SIZE; cnt++) {

if (Tracks[cnt] > TrackHigh)
{
TrackHigh = Tracks[cnt];
}
}
TrackLow = Tracks[0];
for (cnt = 0; cnt < SIZE; cnt++)
if (Tracks[cnt] < TrackHigh)
{
TrackHigh = Tracks[cnt];
}
double total = 0;
double average;
for (int cnt = 0; cnt < SIZE; cnt++)
{
total += Tracks[cnt];
average = (total / SIZE);
}
cout << "The shortest track is: " << TrackHigh << endl;
cout << "The longest track is: " << TrackLow << endl;
cout << "The average length of a track is: " << average << endl;
system("pause");
return 0;
}

您的任务描述实际上告诉了您应该如何做

分钟和秒格式,中间有冒号。

可以使用/和%运算符计算分钟数。

请注意,如果秒数小于10,则此函数必须在冒号后显示一个额外的零。

void displayTime(int totalSeconds)
{
int minutes = totalSeconds / 60;
int seconds = totalSeconds % 60;
std::cout << minutes << ':';
if (seconds < 10) {
std::cout << '0';
}
std::cout << seconds;
}

顺便说一句,using namespace std通常被认为是一种不好的做法。为什么";使用命名空间std"被认为是不好的做法?

编辑:啊和这个:

while (Tracks[cnt] != -1 && cnt < SIZE)

我不太清楚为什么Tracks[cnt]应该不同于-1,因为它当时还没有初始化。我认为cnt<尺码是你所需要的。顺便说一句,把它写成for(cnt=0;cnt<SIZE;++cnt)可能会更好。而且我认为你不必做4个for,你可以做第一个for的所有工作。并从for中导出average,因为只有当您的total是最终的(一旦for结束(,它才有意义。

这是典型的复制粘贴错误

if (Tracks[cnt] < TrackHigh)
{
TrackHigh = Tracks[cnt];
}

必须是TrackLow而不是TrackHigh

if (Tracks[cnt] < TrackHigh)
{
TrackLow = Tracks[cnt];
}

数组在声明中未初始化,因此第一个循环中的条件Tracks[cnt] != -1是未定义的行为。如果-1是停止填充相册的用户信号,则循环必须是

for (cnt = 0; cnt < SIZE; ++cnt)
{
cout << "Track " << cnt + 1 << ": ";
cin >> Tracks[cnt];
if (Tracks[cnt] == -1)
{
AlbumSize = cnt + 1;
break;
}
}

AlbumSize必须在第一个循环之上声明,并在其他循环中使用,而不是SIZE