outData.txt не выводит правильные значения

У меня возникли проблемы с получением # из inData.txt и выводом значения в outData.txt Значения, которые находятся в моем inData.txt: 10.20 5.35

The values ​​that appear in my outData.txt are: Rectangle: Length= -92559631349317830000000000000000000000000000000000000000000000.00, Width= -92559631349317830000000000000000000000000000000000000000000000.00, Area= 8567285355521621000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.00, Perimeter= -370238525397271320000000000000000000000000000000000000000000000.00

Вот мой код (сейчас я просто работаю над выводом длины, ширины, площади и периметра)

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>

using namespace std;

int main ()

{
// Filestream Variable declaration

ifstream inFile;
ofstream outFile;

// Variable Declaration

double length, width, areaOfRectangle, perimeter, radius, areaOfCircle,           beginningBalance, interestRate, pi,
       circumference, endingBalance;
string firstName, lastName;
 int   age;
 char  ch;

// Opening Filestream Variables

 inFile.open("inData.txt");
 outFile.open("outData.txt");

 // Data Manipulation

 outFile << fixed << showpoint;
 outFile << setprecision(2);

 cout << "Processing Data..." << endl;

 // Variable Association


 inFile >> length >> width;
 outFile <<"Rectangle:" << endl;
 areaOfRectangle = length * width;
 perimeter = (length * 2) + (width * 2);
 outFile <<"Length= " << length << ", Width= " << width << ", Area= " << areaOfRectangle << ", Perimeter= " << perimeter << endl;





 // Closing Filestream Variables

 inFile.close();
 outFile.close();






return 0;

    }

person David    schedule 05.10.2012    source источник
comment
Вы никогда не проверяете свои входы на успех. Как вы можете быть уверены, что они были прочитаны правильно?   -  person chris    schedule 05.10.2012
comment
Извините, я не понимаю. Что я делаю не так?   -  person David    schedule 05.10.2012
comment
Вы можете проверить inFile >> length >> width; в логическом контексте. Будет ложным, если он не смог прочитать ни один из них.   -  person chris    schedule 05.10.2012
comment
Ну и как мне заставить его читать правильно?   -  person David    schedule 05.10.2012
comment
Я бы начал с того, чтобы убедиться, что эти .open() работают.   -  person WhozCraig    schedule 05.10.2012
comment
Попробуйте абсолютные пути. Относительные пути обычно вызывают неожиданные ошибки.   -  person chris    schedule 05.10.2012


Ответы (1)


Это проверит ваш код:

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>

using namespace std;

int main ()
{
    // Filestream Variable declaration
    ifstream inFile;
    ofstream outFile;

    // Variable Declaration
    double length, width, areaOfRectangle, perimeter, radius, areaOfCircle, beginningBalance, interestRate, pi,
       circumference, endingBalance;
    string firstName, lastName;
    int age;
    char ch;

    // Opening Filestream Variables
    inFile.open("inData.txt");
    outFile.open("outData.txt");

    if(inFile.fail())
    {
        cerr << "Error opening inData.txt" << std::endl;
        return -1;
    }

    if(outFile.fail())
    {
        cerr << "Error opening outData.txt" << std::endl;
        return -1;
    }

    // Data Manipulation
    outFile << fixed << showpoint;
    outFile << setprecision(2);

    cout << "Processing Data..." << endl;

    // Variable Association
    if(!(inFile >> length >> width)
    {
        cerr << "Failed to read values." << std::endl;
        return -1;
    }

    outFile <<"Rectangle:" << endl;
    areaOfRectangle = length * width;
    perimeter = (length * 2) + (width * 2);
    outFile <<"Length= " << length << ", Width= " << width << ", Area= " << areaOfRectangle << ", Perimeter= " << perimeter << endl;

    // Closing Filestream Variables
    inFile.close();
    outFile.close();

    return 0;
}
person CrazyCasta    schedule 05.10.2012
comment
@DavidCamacho Попробуйте новый код, который я только что обновил, он скажет вам, есть ли проблемы с чтением или открытием. - person CrazyCasta; 05.10.2012
comment
@DavidCamacho, еще раз проверьте, что они были успешно открыты. Среди прочих возможностей они могут и не быть найдены. - person chris; 05.10.2012
comment
@chris Если он запустит новый код, он сообщит ему, не удалось ли его открыть. - person CrazyCasta; 05.10.2012
comment
Затем вам нужно перепроверить содержимое inData.txt. - person CrazyCasta; 05.10.2012
comment
Как вы думаете, я должен попробовать это на другом компьютере? Кроме того, мой код правильный? - person David; 05.10.2012
comment
Если вы используете Windows 7 или Vista, у меня были известные проблемы с системой управления доступом, позволяющей мне получать доступ к локальным файлам. ЕСЛИ это относится к ОС, вам, возможно, придется щелкнуть правой кнопкой мыши и запустить от имени администратора для проверки, а не запускать из IDE. - person M4rc; 05.10.2012
comment
@ M4rc Вы говорите, что это позволит вам открыть файл, но затем испортит чтение? - person CrazyCasta; 05.10.2012
comment
@DavidCamacho Я проверил ваш код на своем компьютере, и, похоже, он работает нормально. Вывод: Rectangle: Length= 10.20, Width= 5.35, Area= 54.57, Perimeter= 31.10 вот почему мы все решили, что проблема в файле. - person CrazyCasta; 05.10.2012
comment
Ага. Почти как нарушение разделения доступа, но явно не так. Windows 7 по какой-то причине, похоже, имеет общие проблемы с работой некоторых простых вещей. По этой причине я всегда ставлю его в режим совместимости с XP SP2 и запускаю от имени администратора перед отладкой. Не говорю, что это ТОЧНО так, но я знаю, что это происходит. - person M4rc; 05.10.2012
comment
Да, у меня Win 7, и я решил запустить MSVS C++ от имени администратора, но все же. попробую на другом компе - person David; 05.10.2012
comment
@ M4rc Да, я имею в виду, что я не согласен с тем, что он работает от имени администратора в целом, но это кажется таким странным, что он открывается и не читается (хотя пусть Microsoft действительно все испортит). - person CrazyCasta; 05.10.2012
comment
Хорошо, не имеет значения, писал ли я свои цифры в блокноте слева направо или сверху вниз. В любом случае, я уже пробовал оба, но ничего - person David; 05.10.2012
comment
@CrazyCasta Я полностью понимаю - кажется, в прошлом году у меня была Windows 7, и я пытался запускать программы, которые я написал для нее, которые были идеальными в Windows XP, просто чтобы делать произвольные вещи [Шифрование, резка наборов плиток] и был удивлен тем, сколько перестал отвечать или выдал неправильные значения; тем не менее, те же самые файлы в разделе Windows XP работали без проблем. - person M4rc; 05.10.2012
comment
@DavidCamacho - Как насчет того, чтобы вместо использования оператора извлечения infile использовать infile.getline(temp, 256, ' '); с temp как char *, просто чтобы увидеть, работает ли оператор извлечения в стиле фанк. Потому что код выглядит так, как будто он должен делать правильные вещи, хотя единственное, о чем я могу думать, это то, что вы читаете его в double, а не в char * или std::string, но это не похоже на то, что это должно быть проблемой. . - person M4rc; 05.10.2012
comment
Дело в том, что мы еще не изучали это в классе, поэтому я не могу придумать .getline( , ) lol Я имею в виду, что если это работает для вас, то это, очевидно, правильно. Я попробую это в своем компьютерном классе в школе - person David; 05.10.2012
comment
Я не знаю многих учителей, которым не нравится, когда люди исследуют тему, чтобы найти другие ответы; если бы мои профессора колледжа были довольно слабыми. ›› должно работать.. Это работает и на моем прогоне, и на CrazyCasta. - person M4rc; 05.10.2012
comment
Да, попробую на другом компе. Спасибо, что остаетесь со мной, ребята, этот сайт очень надежен (не для выполнения домашних заданий, а всякий раз, когда я действительно не знаю, что делаю неправильно) - person David; 05.10.2012