我的代码出现问题 - 我遇到了运行时错误。这些数组只能存储5个值,但实际上存储的数量更多。
#include <iostream>
using namespace std;
int main()
{
const int num = 5;
string t[num], name;
int m[num], score;
for(int i=0; i < num; i++)
{
cout << "Enter the name for score # " << i+1 << " :";
cin >> name;
t[i] = name;
for(int j=i; j<= i ;j++)
{
cout << "Enter the score for score # " << j+1 << " :";
cin >> score;
m[j] = score;
}
}
for(int i=0; i < num; i++)
cout << m[i] << endl;
}
答案 0 :(得分:2)
您没有遇到运行时错误,因为您的阵列存储的内容超出了应有的范围。可能是,当您输入名称时,它包含空格。这将使cin >> score;
只读取第一个字符,将其余字符留在输入缓冲区中。
以下是我运行代码的结果:
[wolf@Targaryen]:~$ r
Enter the name for score # 1 :Alex
Enter the score for score # 1 :100
Enter the name for score # 2 :Bob
Enter the score for score # 2 :99
Enter the name for score # 3 :Charlie
Enter the score for score # 3 :98
Enter the name for score # 4 :Douglas
Enter the score for score # 4 :97
Enter the name for score # 5 :Evin
Enter the score for score # 5 :96
100
99
98
97
96
[wolf@Targaryen]:~$
但是,您的代码确实存在问题。循环for ( int j=i; j<= i ;j++ )
仅执行一次,但不会导致任何错误。
您应该使用以下方式阅读您的姓名输入:
getline(cin, name);
然后你应该清除输入缓冲区,将剩下的垃圾清理到一个未使用的变量。
我想你可能会改变你的代码:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
const int num = 5;
string t[num], name;
int m[num], score;
for(int i=0; i < num; i++)
{
cout << "Enter the name for score # " << i+1 << " :";
getline(cin, name);
t[i] = name;
cout << "Enter the score for score # " << i+1 << " :";
cin >> score;
m[i] = score;
getline(cin, name); // This line just clear out the buffer. "name" used as a trash
}
for(int i=0; i < num; i++)
cout << t[i] << ": " << m[i] << endl;
}
答案 1 :(得分:1)
for(int j=i; j<= i ;j++)
这段代码没有意义,你不需要循环。原因是它只会有一次案例。
i = j
您将j
设置为i
,j
的{{1}}永远不会低于i
。
for(int i=0; i < num; i++)
{
cout << "Enter the name for score # " << i+1 << " :";
cin >> name;
t[i] = name;
cout << "Enter the score for score # " << i+1 << " :";
cin >> score;
m[i] = score;
}
这与你写的基本相同。
编辑更新:
很好地回答OP实际上在问什么......我想。
这只是因为你没有包括<string>
这是整个项目的一些优化和错误检查。
#include <iostream>
#include <string>
using namespace std;
int main()
{
const int num = 5;
string t[num], test;
int m[num];
bool integer = false;
for(int i=0; i < num; i++)
{
cout << "Enter the name for score # " << i+1 << " :";
cin >> t[i];
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
integer = false;
while(integer == false){
cout << "Enter the score for score # " << i+1 << " :";
cin >> m[i];
if(!std::cin.fail())
integer = true;
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
for(int i=0; i < num; i++)
cout << m[i] << endl;
}
我觉得名称和得分变量的需要毫无意义,你可以直接将它们存储到数组中。 此外,我会确保您进行一些错误检查,以确定您cin
它们实际上是不是一个字符串。希望这会有所帮助。