Member 12623341 Ответов: 1

Программа, которая запрашивает у пользователя имя файла и открывает его.


Это было домашнее задание, которое уже было оценено-я просто хочу знать, что я сделал неправильно для своей собственной выгоды. Вот комментарий, который я получил в ответ:

-В fileAdder есть небольшая ошибка, когда последнее считываемое значение добавляется дважды. Похоже, что это проблема с текстовыми файлами в Linux/Unix, заканчивающимися новой строкой. "

Я использую терминал Mac.

'
#include <iostream>
#include <fstream>  //Needed to use files.
#include <string>
using namespace std;

int main()
{
    //This declares the input and output files.
    ifstream input;
    ofstream output;
    string filename;
    
    int value, total = 0;
    
    cout << "Enter the file name: " << endl;
    cin >> filename;
    
    //This function opens file.
    input.open(filename.c_str());
    
    //This checks to see if the file can be opened, 
    //if yes, then it will calculate sum.
    if(input)
    {
        while(!input.eof()) 
        {
            input >> value;      
            total += value;
        }
    }
    
    //This closes the input file.
    input.close();
    
    //This opens the output file.
    output.open("sum.txt");
    
    //This is where a file will open and the calculated sum will be shown.
    if(output.is_open())
       output << total;

    //This is if the file can not be opened.
    else
       cout << "Could not access the file." << endl;
    
    //This closes the output file.
    output.close();

return 0;
}


Вот что требовалось в задании:

Напишите программу, которая запрашивает у пользователя имя файла, а затем пытается открыть его. Функция open нуждается в строке в стиле C (или строковом литерале) вместо строки C++. К счастью, существует функция c_str (), которая даст вам строковую версию строки C++ в стиле C. Например, вместо того, чтобы сказать "входной_файл.открыть(именем)", вы можете сказать "входной_файл.открыть(имяфайла.c_str())". Если входной файл существует и может быть открыт, программа должна прочитать список целых чисел в файле, который будет иметь одно целое число на строку, как в следующем примере:

14
9
12
-6
-30
8
109

Примечание: этот пример предназначен только для демонстрации формата входного файла. Ваша программа не будет выводить эти значения на консоль или в выходной файл.

Затем программа сложит вместе все целые числа в файле и откроет выходной файл под названием sum.txt, и запишите сумму в этот файл (только это число - никакого дополнительного текста). Не забудьте закрыть как входные, так и выходные файлы. Если входного файла нет (или он есть, но по какой-то причине не может быть открыт), программа должна просто распечатать "не удалось получить доступ к файлу".

Файл должен иметь имя: fileAdder.cpp

Что я уже пробовал:

Я заменяю:
int value, total = 0;

со следующим:

int value; / / value-некоторое положительное число n
int total = 0; / / total содержит сумму первых n положительных чисел
int number; / / количество чисел

1 Ответов

Рейтинг:
0

OriginalGriff

Поэтому дублируйте задачу-создайте копию вашего входного файла и редактируйте его, пока он не будет соответствовать описанию ваших преподавателей. Затем используйте свое приложение, чтобы доказать, что проблема существует в вашем коде, подавая ему исходные и немодифицированные версии.
Затем запустите свое приложение в отладчике и передайте ему файл, который показывает проблему. Следуйте коду до конца, переступая через каждую строчку и заранее определяя, что именно вы ожидаете. Он сделал то, что вы ожидали? Если так, продолжайте. Если нет, то почему?
Этот процесс называется отладкой, и это важный навык. Однако, как и все навыки, он должен быть использован для развития - и гораздо проще разработать его на таком маленьком приложении, как это, чем на 100 000-линейном монстре!
Так что попробуйте и посмотрите, что вы можете узнать.

[править]опечатки [/править]