首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >I/O问题,三个输入文件使用此代码,但第一个输出文件当前已完成,另外两个文件在c++中显示为垃圾

I/O问题,三个输入文件使用此代码,但第一个输出文件当前已完成,另外两个文件在c++中显示为垃圾
EN

Stack Overflow用户
提问于 2020-12-10 16:12:10
回答 1查看 38关注 0票数 0

我正在尝试使用冒泡排序对三个文件(I/O)进行排序。为此,我编写了以下代码

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

void bubble_Sort_ascending_order(ll n, ll v[]){
    ll i,j;
    for(i=1; i<=n-1; i++)
    {
        for(j=1; j<=n-i; j++)
        {
            if(v[j]>v[j+1])
                swap(v[j],v[j+1]);
        }
    }
}

int bubble_Sort_ascending_input1() {

    freopen("input1.txt","r",stdin);
    freopen("output_File1.txt","w",stdout);

    ll n;
    cin >> n;
    ll t[n];
    for(ll i=1; i<=n; i++)
    {
        cin >> t[i];
    }

    bubble_Sort_ascending_order(n,t);

    for(ll k=1; k<=n; k++)
    {
        cout << t[k] << endl;
    }
}

int bubble_Sort_ascending_input2() {

    freopen("input2.txt","r",stdin);
    freopen("output_File2.txt","w",stdout);

    ll n;
    cin >> n;
    ll r[n];
    for(ll i=1; i<=n; i++)
    {
        cin >> r[i];
    }

    bubble_Sort_ascending_order(n,r);

    for(ll k=1; k<=n; k++)
    {
        cout << r[k] << endl;
    }
}

int bubble_Sort_ascending_input3() {

    freopen("input3.txt","r",stdin);
    freopen("output_File3.txt","w",stdout);

    ll n;
    cin >> n;
    ll v[n];
    for(ll i=1; i<=n; i++)
    {
        cin >> v[i];
    }

    bubble_Sort_ascending_order(n,v);

    for(ll k=1; k<=n; k++)
    {
        cout <<v[k]<<endl;
    }
}


int main(){
    bulble_Sort_ascending_input1();
    bubble_Sort_ascending_input2();    
    bubble_Sort_ascending_input3();
}

第一个输入文件函数输出工作正常。第二个和第三个输入函数给出了输出文件二和三中的垃圾值。

但我似乎找不到任何类似问题的解决方案。由于某些原因,我在理解文件I/O方面确实遇到了问题。提前感谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2020-12-10 18:57:31

这可能不能回答您的问题,但我在您的bubble sort算法中看到了一些缺陷。首先,您的索引必须从0开始,否则您将永远不会读取数组中的第一个元素,然后您可以通过for循环中的正确条件来提高速度。

然后,您可以将bubble_Sort_ascending_input()方法编写为具有std::string input_file_namestd::string output_file_name等参数的方法。然后,您将更容易地调试程序并查看问题所在。

看在上帝的份上,不要使用#include <bits/stdc++.h>

代码语言:javascript
复制
#include <fstream>

using namespace std;

typedef long long ll;

void bubble_Sort_ascending_order(ll n, ll v[]) {
    ll i,j;
    for(i = 0; i < n-1; i++) {
        for(j = 0; j < n - i -1; j++) {
            if(v[j] > v[j+1])
                swap(v[j], v[j+1]);
        }
    }
}

void bubble_Sort_ascending(const std::string& input_file, const std::string& output_file) {

    fstream input("../"+input_file, fstream::in);
    fstream output("../"+output_file, fstream::out);
    // "../" is just for IDE, if you run it from cmd, delete the path

    ll n;
    if (input.is_open()) {
        input >> n;
        ll arr[n];
        int i = 0;
        while (input >> arr[i]) {
            ++i;
        }
        bubble_Sort_ascending_order(n, arr);
        if (output.is_open()) {
            for (ll& number : arr) {
                output << number << " ";
            }
        }
    } else {
        cout << "input not open";
    }
}

int main() {
   bubble_Sort_ascending("input1.txt", "output1.txt");
   return 0;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65230715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档