Как записать четные числа из файла последовательного доступа в новый файл последовательного доступа - PullRequest
0 голосов
/ 04 декабря 2009

Может ли кто-нибудь, у кого мало времени, скомпилировать и запустить этот код и посмотреть, где я ошибаюсь?

#include <iostream>
#include <fstream>

using std::cout;
using std::endl;
using std::ifstream;
using std::ofstream;
using std::ios;

int main()
{
    int numbers = 0;

    //create and open file
    ifstream inFile;
    ofstream outFile;
    inFile.open ("numbers.txt", ios::in);
    outFile.open ("evenNumbers.txt", ios::out);

    //determine whether the file was opened
    if (inFile.is_open() && outFile.is_open())
    {
        //read numbers file
        inFile >> numbers;

        while (!inFile.eof())
        {
            //look for even numbers
            if (numbers %2 == 0)
            {
                outFile << numbers << endl;
                //cout << numbers << endl;
            }
            inFile >> numbers;

        }
        //end while

        //close files
        outFile.close();
        inFile.close();

        cout << "Program successful. File complete." << endl;

    }
    //if file fails to open, display error message
    else
        cout << " File could not be opened " << endl;

    //end if

    system ("pause");
    return 0;
} //end of main function

Ответы [ 3 ]

2 голосов
/ 04 декабря 2009

У вашего кода довольно много проблем:

ifstream inFile;
inFile.open("numbers.txt", ios::in);

Это не совсем ошибка, но ios::in является значением по умолчанию для ifstream, и вы обычно предоставляете имя файла конструктору, что-то вроде этого:

ifstream inFile("numbers.txt");

Тогда у нас есть это:

getline(inFile, name);
inFile >> num;
while (inFile.eof())

while (inFile.eof()), кажется, имеет логику в обратном направлении - вы хотите читать до тех пор, пока не достигнете конца, а затем выйдите. Остальная часть вашего цикла будет работать (необычно для цикла, в котором в качестве условия используется file.eof()), но излишне длинна и трудна для чтения.

 //create file object and open the file
 ofstream outFile;
 outFile.open("updatedNumbers.txt", ios::out);

Как и следовало ожидать из предыдущего комментария, ios::out является значением по умолчанию для ofstream, и вы обычно присваиваете имя файла конструктору: ofstream outFile("updatedNumbers.txt");

 //write the updated numbers to the file
 outFile << heading << endl;
 outFile << columnHeaders << endl;
 outFile << underLines << endl;

heading, columnHeadders и underLines кажутся неопределенными переменными.

    for (x=0;x<20; x++)
    {
    if (int x%2==0)
      sample[x] = x+2;
    else
      sample[x] = x+20;

sample также кажется неопределенным.

   outFile << num[x] << endl;

num также кажется неопределенным. Возможно, вы хотели, чтобы он был таким же, как sample? В противном случае, у вас, похоже, нет кода для установки какого-либо конкретного значения перед его записью.

Вероятно, хуже всего этого является тот факт, что ваш заголовок говорит о записи четных чисел из одного файла в другой, но ваш код, похоже, вообще не делает ничего похожего на это.

0 голосов
/ 04 декабря 2009

Ошибка здесь:

outFile << heading << endl;
outFile << columnHeaders << endl;
outFile << underLines << endl;

Это первый раз, когда эти переменные heading, columnHeaders и underLines упоминаются в вашей программе. Компилятор жалуется, потому что они нигде не были объявлены (должны ли они быть int или std::string или другого типа?). Также они не будут содержать никаких полезных значений, потому что им ничего не назначено.

0 голосов
/ 04 декабря 2009

Ну, переменная заголовка не объявлена, но я думаю, вы уже это знаете ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...