在提示用户进行选择并输入3后,系统会要求他们从给定的列表中输入名称。 如果他们输入的名称不在列表中,则程序需要输出一个声明,表明输入的名称不在列表中
我已经尝试了所有我能想到的东西,如果我删除了错误捕获程序,程序也能正常工作。
问题出在int SpecTime
函数
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
double FastSkier(double [], string[], int); //Function for finding fastest skier
double AvgTime(double[], int); //Function for finding Average
int SpecTime(double[], string[], int); //Function for finding the time of the name entered
int SkiAndTime(double[], string[], int); //Function to list all Skiers and their times
int main()
{
const int Size = 5; //size of arrays
string name[Size] = { "Leela" , "Sarah" , "Anna" , "Keesha" , "Heidi" }; //array for Skier names
double time[Size] = { 2.03 , 2.40 , 1.85 , 1.90 , 2.50 }; //array for Skier times
int choice;
for (int count = 1;; count++)
{
cout << "Enter 1 to find the fastest Skier" << endl;
cout << "Enter 2 for the average time of the Skiers" << endl;
cout << "Enter 3 to find the time of a specific Skier \n";
cout << "Enter 4 to display all Skiers and their times \n";
cout << "Enter any other number to end the program \n";
cout << "\n";
cin >> choice;
if (choice == 1)
FastSkier(time, name, Size);
else if (choice == 2)
AvgTime(time, Size);
else if (choice == 3)
SpecTime(time, name, Size);
else if (choice == 4)
SkiAndTime(time, name, Size);
else
return 0;
}
system ("pause");
return 0;
}
double FastSkier(double time[], string name[], int Size)
{
int Loc; //location of data within array, value determined by for-loop
int count; //Counter
double fastest=time[0]; //variable to find fastest time for Skier, initialized at first value of time
for (count = 1; count < Size; count++) //cycles through all values of time comparing each one to find the lowest value
{
if (time[count] < fastest)
Loc = count-1; //subtract 1 from count to adjust for array index
}
cout << "\n";
cout << "The fastest Skier is " << name[Loc] << " with a time of " << fixed << setprecision(2) << time[Loc] << endl;
cout << "\n";
return 0;
}
double AvgTime(double time[], int Size)
{
int Loc; //location of data within array, acts as a counter in this function
double Avg; //Average
double sum = 0; //sum of all values within time[]
for (Loc = 0; Loc < Size; Loc++)
sum += time[Loc];
Avg = sum / Size;
cout << "\n";
cout << "The average time for Skiers is " << fixed << setprecision(2) << Avg << endl;
cout << "\n";
cout << "\n";
return 0;
}
int SpecTime(double time[], string name[], int Size)
{
string Skier; //Name of Skier entered by user
int Loc=0;
bool List = true;
cout << "Skiers \n";
for (int Loc = 0; Loc < Size; Loc++) //For-loop used to output and display all names of Skiers
{
cout << " " << name[Loc] << endl;
}
cout << "Enter the name of the Skier to view their time \n";
cin >> Skier;
for (int Loc = 0; Loc < Size; Loc++) //For-loop used to find the desired Skier's time
{
if (Skier == name[Loc])
{
cout << Skier << " has the time " << fixed << setprecision(2) << time[Loc] << endl;
cout << "\n";
break;
}
}
if (Skier != name[Loc]) //error trap for inputted names that are not listed
{
cout << "The name you entered is not a current competitor in this competition \n";
cout << "\n";
//break;
}
return 0;
}
int SkiAndTime(double time[], string name[], int Size)
{
cout << "Skiers Times" << endl;
cout << "\n";
for (int All = 0; All< Size; All++)
cout << name[All] << " " << fixed << setprecision(2) << time[All] << endl;
cout << "\n";
return 0;
}
答案 0 :(得分:1)
在Loc
的秒行中创建的变量SpecTime
不是变量Loc
,它在循环中使用。
看一下
for (int Loc = 0; Loc < Size; Loc++)
int Loc = 0
表示您创建一个隐藏原始变量的新变量。将其更改为Loc = 0
,代码应该正常运行。
有关变量阴影的更多信息:In C++, when can two variables of the same name be visible in the same scope?