2014-03-30 51 views
0

任何人都可以修复此示例代码,该代码将打印2D数组中的文件。这里是代码和输出。使用二维数组打开流

while (!file.eof()) 
{ 
    int counter =0; 
    file>>n; 

    cout<< setw(4)<< n << " ";  

    if (counter == 5) 
    {   
     cout << endl; 
     counter = 0; 
     counter ++; 
     } 

    } 
} 

输出不是表格形式。

的输出是:

指数大小重量(磅/英尺)直径(英寸)0 2 0.167 0.250 1 3 0.376 0.375 2 4 0.668 0.500 3 5 1.043 0.625 4 7 1.502 0 6 9 2.670 1.000 7 12 3.400 1.128 8 14 4.303 1.270 1.270

按任意键继续。 。 。

+0

你设置'计数器= 0'在循环的每次迭代的顶部,所以它永远不会达到5 ...移动你的'计数器'变量的定义在循环之前...而且,如果它已经是5,你只会增加它,所以还有另一个原因,它永远不会达到5 ... – twalberg

回答

0

两个选项:

定义coutner静态

while (!file.eof()) 
{ 
    static int counter =0; 
    file>>n; 

    cout<< setw(4)<< n << " ";  

    if (counter == 5) 
    {   
     cout << endl; 
     counter = 0; 
     counter ++; 
     } 

    } 
} 

还是有它定义外部while循环:

int counter = 0; 

while (!file.eof()) 
{ 

    file>>n; 

    cout<< setw(4)<< n << " ";  

    if (counter == 5) 
    {   
     cout << endl; 
     counter = 0; 
     counter ++; 
     } 

    } 
} 

如果你定义它和以往任何时候都初始化为0 iteratoin的while循环 - 它永远不会达到5打印endl;

0

似乎不像其他人指出的那样,在每个循环中初始化计数器,而且实际上从未实际增加计数器。我看到的唯一增长是在等于五的情况下。由于它在条件之外永远不会增加,所以它永远不会达到五(即使它被声明为静态或在循环之外),因此从未满足条件。

您的开启和关闭花括号也有不均匀的数量。

我不完全确定你想达到什么。如果你想每五迭代后换行,下面应该工作:

int counter = 0; 
cout << setw(4) // suffice to set once 

while (!file.eof()) 
{ 
    file >> n; 

    cout << n << " "; 

    if (++counter == 5) // increase here before checking condition 
    {   
     cout << endl; 
     counter = 0; 
     // do not increase here again 
    } 
}