C++字符串类输入
我试图读取用户输入的值,把他们放到一个字符串类数组中,但我得到一个BAD EXCESS
错误,我猜它的事情很简单,我做错了。这是我得到的。任何帮助将是巨大的C++字符串类输入
int main()
{
const int SIZE = 5;
string fruity[SIZE];
int i;
cout << "Enter the names of five kinds of fruit:" << endl;
for(i = 0; i < SIZE; i++)
{
cout << "Enter Name of Fruit" << endl;
getline(cin, fruity[i]);
}
cout << fruity[i] << endl;
return 0;
}
cout << fruity[i] << endl;
这是无效的。做到这一点,而不是:
for(i = 0; i < SIZE; i++)
cout << fruity[i] << endl;
因为在这一点上你的i
将等于SIZE
,并是无效的。
,所以在技术上没有功课,那么现在已经有用户输入值填充的“水果”数组? – hart929
他在哪里做'水果[]'? – quasiverse
'水果[0]'应该'水果[我]'?? –
在for循环之后,变量i
的值为SIZE
,所以当您尝试访问它时,您将出现界限。你将不得不使用另一种循环,如果你想输出它像这样:
for (i = 0; i < SIZE; i++) {
cout << fruity[i] << endl;
}
'i'在'for'循环之外声明。 –
Eugh。那里发生了什么。编辑来解决真正的问题。 – quasiverse
那么数组现在由输入填充了吗?所以如果我想把它发送到选择类别,我可以吗? – hart929
你需要一个循环:
for(int i = 0; i < SIZE; i++)
{
cout << fruity[i] << endl;
}
使用'#include
在下面的语句
cout << fruity[i] << endl;
“i”是超出范围。当退出for循环“5”时,“i”的值你的编译器应该警告过你在for循环的范围之外使用“i”。你的for循环设置果味[0],果味[1],果味[2],果味[3],果味[4],但“果味[5]”超出范围。因此,当您尝试打印“水果[i]”时会产生垃圾数据。这导致seg故障崩溃。
始终使变量地方尽可能。 C++允许您在循环内定义循环变量
for(int i = 0; i < SIZE; i++)
{
...
}
// i no longer in scope
以便它们在循环结束时超出范围,这与本地获得的范围相同。
这样做,就会发现你正在使用i
访问数组循环后,在这一点i
具有价值SIZE
,导致访问越界的。 (记住,数组中有索引0..SIZE-1
)
我不知道在你的程序
cout << fruity[i] << endl;
最后一行应该做的事,但如果你想输出数组的conetent(如其他答案建议),你确实需要另一个循环。
其他更小的点:
我们真的不知道你用的是什么串类,因为您省略了
std::
前缀。 (对于您使用的标准库中的所有其他标识符也是如此。)I disapprove of that。数组索引的正确类型是
std::size_t
。的
std::endl
机械手将插入一个'\n'
到输出流中并冲洗流的缓冲区。在您的交互式控制台程序中,这通常不会造成任何伤害。但请记住,过早刷新缓冲区可能会大大减慢程序的速度。 (我曾见过一个案例是一个程序将大量数据写入文件流中,几个字节的涓流由于此而减慢了一个数量级。)在这种情况下,手动刷新输出流#s缓冲区从来没有真正的必要。 (当然,你想你会提示您从输入流中读取之前出现,但是这是由std::cout
被捆绑到std::cin
默认情况下实现的,使得std::cout
冲洗每当程序试图从std::cin
阅读。)
程序,我会写出来,应该是这样的:
// Beware, brain-compiled code ahead!
#include <string>
#include <iostream>
int main()
{
const std::size_t size = 5;
std::string fruity[size];
std::cout << "Enter the names of five kinds of fruit:" << '\n';
for(std::size_t i = 0; i < size; ++i)
{
std::cout << "Enter Name of Fruit" << '\n';
std::getline(std::cin, fruity[i]);
}
for(std::size_t i = 0; i < size; ++i)
{
std::cout << fruity[i] << `\n`;
}
return 0;
}
什么是“坏过剩” ......?暴饮暴食? –
因为我试图自我教导 – hart929