始終使變量地方儘可能。 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;
}
來源
2011-09-20 05:35:34
sbi
什麼是「壞過剩」 ......?暴飲暴食? –
因爲我試圖自我教導 – hart929