将奇怪的符号打印到输出文件,c ++

时间:2017-02-28 03:32:52

标签: c++ symbols into-outfile

我正在编写一个代码,用于读取数字的输入文件,按升序对它们进行排序,然后将它们打印到输出中。输出的唯一内容是一些非常怪异的符号。

这是我的代码

#include <fstream>
#include <iostream>
using namespace std;

int main()
{
    int i, y, temp, num[20];
    char file_nameI[21], file_nameO[21];
    ofstream outfile;
    ifstream infile;

    cout << "Please enter name of input file:  ";
    cin >> file_nameI;
    infile.open(file_nameI);
    if (!infile)
    {
        cout << "Could not open input file \n";
        return 0;
    }

    cout << "Please enter name of output file:  ";
    cin >> file_nameO;
    outfile.open(file_nameO);
    if (!outfile)
    {
        cout << "Could not open output file \n";
        return 0;
    }

    for (i = 0; i < 20; i++)
    {
        y = i + 1;
        while (y < 5)
        {
            if (num[i] > num[y])      //Correction3
            {
                infile >> temp;
                temp = num[i];
                num[i] = num[y];
                num[y] = temp;
                //y++;          //Correction4
            }
            y++;
        }
    }

    for (i = 0; i < 5; i++)
        outfile << "num[i]:" << num[i] << "\n";

    return 0;
}

这是我的输入

6 7 9 0 40 

这是输出

 „Ô,üþ 54
H|À°ÀzY „Ô,üþ 0

2 个答案:

答案 0 :(得分:4)

评论中已经提到了您的代码问题,但是又一次:

  1. 第一个问题是num[20]的未初始化元素 - num的元素具有不确定值,因此访问其中任何一个都会触发未定义的行为。您应该首先从文件中读取它们,或者至少将它们初始化为某个默认值。
  2. 最有可能进行排序的代码部分完全错误。如果您想要实现自己的排序功能,可以选择一些众所周知的算法,例如: quicksort - 但C ++标准库已经提供了排序功能 - std::sort
  3. 除了明显的错误:

    1. 您正在使用char[] - 在C ++中,使用std::string几乎总是更好。
    2. 您的静态数组只能存储20个值,而您正在从文件中读取这些值。您可以使用std::vector,当您添加的元素超过其当前容量时,num[20]会增长。它还会自动修复std::string
    3. 的未初始化元素的问题
    4. 如评论中所述,您可以通过将代码拆分为函数来组织代码并提高可读性。
    5. 在这里你很快就重写了。此代码使用char[]代替std::vectorstd::sort来存储数字和#include <fstream> #include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; vector<int> read_file(ifstream& in_file) { vector<int> vec; int value; while (in_file >> value) { vec.push_back(value); } return vec; } void write_file(ofstream& out_file, const vector<int>& values) { for (size_t i = 0; i < values.size(); ++i) out_file << "value #" << i << ": " << values[i] << '\n'; } int main() { string input_filename, output_filename; ofstream out_file; ifstream in_file; cout << "Please enter name of input file: "; cin >> input_filename; in_file.open(input_filename); if (!in_file) { cout << "Could not open input file\n"; return 0; } cout << "Please enter name of output file: "; cin >> output_filename; out_file.open(output_filename); if (!out_file) { cout << "Could not open output file\n"; return 0; } auto numbers = read_file(in_file); sort(begin(numbers), end(numbers)); write_file(out_file, numbers); return 0; } 。如果您在此处不了解某些内容,请阅读SO文档:

      $(document).ready()

答案 1 :(得分:1)

您可能忘记在num数组中存储值。只需按照以下方式更新您的代码即可。

infile.open(file_nameI);
if (!infile){
    cout << "Could not open input file \n";
    return 0;
} else{
    i = 0;
    while (infile >> num[i]){
        i++;
    }
}