在我的程序中,我试图读取一个数字文件。我想取第一个数字,并将该数字作为我的数组的大小。关闭文件后,我想重新打开同一个文件并将其余的数字存储到数组中。在数组中,我想使用冒泡排序算法对数字进行排序,并按升序显示数组。
int readData(int * arr);
void bsort(int * arr, int last);
void writeToConsole(int * arr, int last);
void swap(int, int);
int main()
{
ifstream inFile("data.txt");
int arrSize;
inFile >> arrSize;
int * arr = new int[arrSize];
inFile.close();
readData(arr);
writeToConsole(arr, arrSize);
system("pause");
return 0;
}
int readData(int * arr)
{
ifstream read("data.txt");
int index = 0;
for(int i = 0; i < 10; i++)
{
read >> *(arr + index);
index++;
}
read.close();
return *arr;
}
void bsort(int * arr, int last)
{
for (int i = last - 1; i >= 0; i--)
{
for (int j = 1; j <= i; j++)
{
//this block is constant with respect to array size
if (*(arr + (j - 1)) > *(arr + j))
{
int temp = *(arr + (j - 1));
*(arr + (j - 1)) = *(arr + j);
*(arr + j) = temp;
}
}
}
}
void writeToConsole(int * arr, int last)
{
bsort(arr, last);
for (int i = 0; i < last; i++)
{
cout << *(arr + i) << " ";
}
}
void swap(int x, int y)
{
int temp = x;
x = y;
y = temp;
}
换句话说,我第一次读取文件时,存储的数字将代表我的数组的大小。我第二次读取文件时,我想跳过第一个数字并继续下一个。阅读文件时,如何跳过第一个数字?任何帮助将不胜感激。
以下是我想要阅读的文件中的信息:
9
8
4
7
2
9
5
6
1
3
答案 0 :(得分:0)
可以读取文件,读取大小,然后关闭它,然后再次打开,跳过大小,并阅读内容。但这是一件奇怪的事情。大多数人会打开文件,读取大小,为数据分配空间,读取数据,然后关闭文件。
在C中,在阅读之前知道文件数据大小通常很方便。在C ++中,它远没那么重要,因为std :: vector类为你扩展,在幕后进行所有繁琐的内存重新分配。
提取和插入操作符&lt;&lt; &GT;&GT;当一切正常时,在C ++中可以说比C版本更容易使用。当他们出错时,更难理解出了什么问题。一般来说,我建议新手使用fopen和fgets()逐行读取文件。这样你就不会因丢失或跳过的字符而感到困惑。函数sscanf()然后将ascii字符串转换为数字,但您也可以在调试时打印出该行以计算出正在发生的事情。
答案 1 :(得分:0)
在您使用C ++而不是C语言之后,更推荐使用C ++语言和标准库的所有潜力。有很多方法可以做你想要的。取决于存储在文件中的数据的格式。但在所有情况下,标准库都为您提供了大量的功能和实用工具,可以不重新发明轮子并将注意力集中在您的真正问题上。就我而言,我为这个特定的I / O案例提出了这个解决方案。最后,我强烈建议:转到文档并尝试找到可能使您的工作更简单的内容
http://www.cplusplus.com/reference/
http://en.cppreference.com/w/cpp
#include <bits/stdc++.h>
using namespace std;
vector<int> read_data( const string file_name){
ifstream inf(file_name);
istream_iterator<int> eoi, input(inf);
vector<int> arr(*input++);//take the first integer, the size, and advance the iterator
copy(input, eoi, arr.begin());
return arr;
}
void bsort( vector<int>& data ){
//sort data like you want
sort( data.begin(), data.end());
}
void write_to_console( vector<int>& data){
//do your stuff
copy(data.begin(), data.end(), ostream_iterator<int>(cout," "));
}
int main(void) {
string file_name = "data.txt";
auto data = read_data( file_name );
bsort( data );
write_to_console( data );
return 0;
}