显示数组中的大元素

Displaying An Array big elements

本文关键字:元素 数组 显示      更新时间:2023-10-16

我想用一个方法来显示数组,如果数组有200个元素,它会显示所有的元素,这对我来说很好。问题是,如果数组有超过200个元素,我想显示数组的前100个元素和最后100个元素。如果我使用一个包含500个元素甚至10000个元素的数组,它可以工作,但是我输入9999或8999,我在显示列表的下半部分得到的是长负整数,但上半部分可以工作。任何建议吗?

int main()
{
   string fileName,text, size;
   fstream inText;
   int lengthOf = 0;
   cout << "Please Enter An Input File Name: ";
   getline(cin, fileName);
   inText.open(fileName.c_str() , fstream::in);
   if(!inText)
   {
       cout << "Could Not Open " << fileName << " File" << endl;
       exit(EXIT_FAILURE);
   }
   else
   {
   inText >> lengthOf;
   int * myArray  = new int[lengthOf];
   for(int i = 0; i < lengthOf; i++)
   {
        inText >> myArray[i];
   }
   cout << "Data File Array " << endl;
   displayArray(myArray,lengthOf);
 }
 return 0;
 }
void displayArray (int a[], int s)
{
if(s <= 200)
{
    for (int i = 0; i < s; ++i)
    {
        if(i%10 == 0)
        {
            cout << endl;
        }
        cout << setw(6) << a[i] << " ";
    }
    cout << endl;
}
else
{
    for(int  i = 0; i < 100; i++)
    {
        if(i%10 == 0)
        {
            cout << endl;
        }
        cout << setw(6) << a[i] << " ";
    }
    cout << endl;
    for (int i = s-100; i < s; ++i)
    {
        if (i%10 == 0)
        {
            cout << endl;
        }
        cout  << setw(6) << a[i] << " ";
    }
    cout << endl;
   }
}

打印数组很简单,例如:

int main()
{
    int a[551]; //some random number
    int s = 551;
    for (int i = 0; i < s; ++i) a[i] = i;
    for (int i = 0; i < s; ++i)
    {
        if (i % 10 == 0) cout << "n";
        if (i % 100 == 0) cout << "n";
        cout << std::setw(6) << a[i] << " ";
    }
    return 0;
}

当读取文件时,你可以使用std::vector来存储整数,这样你就不必事先知道数组应该有多大。下面的例子读取文本,然后尝试转换为整数,这样你就知道输入文件中是否有错误。

#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <iomanip>
using namespace std;
int main()
{
    std::string fileName;
    cout << "Please Enter An Input File Name: ";
    getline(cin, fileName);
    std::ifstream inText(fileName);
    std::vector<int> vec;
    std::string temp;
    while (inText >> temp)
    {
        try {
            int i = std::stoi(temp);
            vec.push_back(i);
        }
        catch (...) {
            cout << temp << " - error reading integern";
        }
    }
    for (size_t i = 0; i < vec.size(); ++i)
    {
        if (i % 10 == 0) cout << "n";
        if (i % 100 == 0) cout << "n";
        cout << std::setw(6) << vec[i] << " ";
    }
    return 0;
}

你确定这个方法有问题吗?代码似乎有效,我无法重现你的问题。也许你可以粘贴你的整个代码(如果它不是太大)?