[英]How can I use C++11's range-based for loop to output data in a table?
这是我的代码:
#include <iostream>
#include <iomanip>
#include <array>
using namespace std;
int main()
{
// array< int, 5 > n;
int n [ 5 ] = { 2, 4, 6, 8, 10};
cout << "Element" << setw(13) << "Value" << endl;
for ( int j : n )
{
cout << setw(7) << j << setw(13) << n[ j ] << endl;
}
}
它产生了以下输出:
Element Value
2 6
4 10
6 -1078585116
8 -1217581056
10 0
虽然我期望这个输出:
Element Value
1 2
2 4
3 6
4 8
5 10
我尝试过更改一些小东西,但是它们没有用。 我在哪里做错了?
如果需要索引时,最好使用普通循环而不是基于范围的for循环。 例如
int main()
{
// array< int, 5 > n;
int n [ 5 ] = { 2, 4, 6, 8, 10};
cout << "Element" << setw(13) << "Value" << endl;
for ( size_t i = 0; i < sizeof( n ) / sizeof( *n ); i++ )
{
cout << setw(7) << i + 1 << setw(13) << n[ i ] << endl;
}
}
如果要使用基于范围的for循环,则需要在循环之前声明一个辅助计数。 例如
int main()
{
// array< int, 5 > n;
int n [ 5 ] = { 2, 4, 6, 8, 10};
cout << "Element" << setw(13) << "Value" << endl;
size_t i = 0;
for ( int a : n )
{
cout << setw(7) << ++i << setw(13) << a << endl;
}
}
至于您的代码,那么您将数组的元素用作其中的索引
for ( int j : n )
{
cout << setw(7) << j << setw(13) << n[ j ] << endl;
^^^ ^^^^^
element of n using element of n as an index
}
您的数组没有6、8或10个元素。 因此,您正在读取不存在的元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.