2016-10-05 4 views
3

Я чрезвычайно новичок в C++. Меня попросили написать текстовый файл, содержащий столбцы данных. В частности, четыре столбца, сравнивающие реальное значение экспоненты (x) с моей функцией расширения ряда до нескольких градусов. x будет варьироваться от 0 до 1 с интервалами 0,04.Запись столбчатых данных в файл .txt. C++

, например

x | exp(x) | M1 | M2 | M3 | 
    0 | 1 | 1 | 1 | 1 | 
0.04| 1.15 |1.01|1.09|1.12| (values in example are not exact) 
. | 
. 
. 

Однако я изо всех сил, чтобы получить мои данные в аккуратные столбцов в текстовом файле (.txt), и я просто не знаю, как его отформатировать.

ExpSeries() - моя функция серии.

int main() 
{ 
    std::ofstream demoFile; 
    demoFile.open("Test3.txt"); 
    if (!demoFile) 
     return 1; 
    double i = 0; 
    //demoFile << exp(2) << std::endl; 
    for (i = 0; i < 1; i = i + 0.04) { 
     demoFile << exp(i); 
     demoFile << ExpSeries(i, 2); 
     demoFile << ExpSeries(i, 3); 
     demoFile << ExpSeries(i, 4) << std::endl; 
    } 

    demoFile.close(); 
    return 0; 
} 
+3

посмотрите на [ 'станд :: setw'] (Http: //en.cppreference .com/ж/CPP/И.О./Manip/setw). – BoBTFish

+1

Пожалуйста, не редактируйте вопрос после получения ответов. Особенно не пытайтесь исправить вещи, которые вы на самом деле просили – user463035818

+0

. Также имеется [Формат Boost] (http://www.boost.org/doc/libs/1_62_0/libs/format/doc/format.html), но это может быть переполненным для новичка, стремящегося достичь чего-то довольно простого. – BoBTFish

ответ

2

Вы должны установить ширину вашего выхода с setw параметром

используют то же фиксированное значение для каждого столбца.

1

Вы можете использовать setw, чтобы установить ширину столбца:

#include<iomanip> 
using namespace std; 
... 
demoFile << setw(4) << exp(i); 
demoFile << setw(5) << ExpSeries(i, 2); 

Вам также может понадобиться использовать зЬй :: неподвижных и зЬй :: точность, чтобы обеспечить нужное количество знаков после запятой.

+0

Спасибо, ребята, была смешана с незнанием std :: cout делала (setw гораздо более понятна мне) и отсутствует при использовании экспоненциальной функции - глупая ошибка –

0

В строке, вы можете использовать

/t 

между переменными. Например,

"exp(x) /t M1 /t M2" 

The/t - это вкладка. @stack_danny показывает правильный путь.

3

Если вы используете std::setw и std::setprecision от <iomanip>, вы можете отформатировать его довольно хорошо & легко.

demoFile << " x | exp(x) | M1 | M2 | M3 |" << std::endl; 
demoFile << "................................." << std::endl; 

double i = 0; 
for (; i < 1.0; i += 0.04){ 
    demoFile << std::setprecision(2) << std::fixed; //set some precision for nice format 
    demoFile << std::setw(4) << i << " |"; 
    demoFile << std::setw(7) << exp(i) << " | "; 
    demoFile << std::setw(4) << ExpSeries(i, 2) << " | "; 
    demoFile << std::setw(4) << ExpSeries(i, 3) << " | "; 
    demoFile << std::setw(4) << ExpSeries(i, 4) << " | "; 

    demoFile << '\n'; 
} 

Здесь вы можете увидеть выводе (только несколько примеров удваивают, но те же настройки):

x | exp(x) | M1 | M2 | M3 | 
................................. 
0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 
0.04 | 0.08 | 0.12 | 0.16 | 0.20 | 
0.08 | 0.16 | 0.24 | 0.32 | 0.40 | 
0.12 | 0.24 | 0.36 | 0.48 | 0.60 | 
0.16 | 0.32 | 0.48 | 0.64 | 0.80 | 
0.20 | 0.40 | 0.60 | 0.80 | 1.00 | 
0.24 | 0.48 | 0.72 | 0.96 | 1.20 | 
0.28 | 0.56 | 0.84 | 1.12 | 1.40 | 
0.32 | 0.64 | 0.96 | 1.28 | 1.60 | 
0.36 | 0.72 | 1.08 | 1.44 | 1.80 | 
0.40 | 0.80 | 1.20 | 1.60 | 2.00 | 
0.44 | 0.88 | 1.32 | 1.76 | 2.20 | 
0.48 | 0.96 | 1.44 | 1.92 | 2.40 | 
0.52 | 1.04 | 1.56 | 2.08 | 2.60 | 
0.56 | 1.12 | 1.68 | 2.24 | 2.80 | 
0.60 | 1.20 | 1.80 | 2.40 | 3.00 | 
0.64 | 1.28 | 1.92 | 2.56 | 3.20 | 
0.68 | 1.36 | 2.04 | 2.72 | 3.40 | 
0.72 | 1.44 | 2.16 | 2.88 | 3.60 | 
0.76 | 1.52 | 2.28 | 3.04 | 3.80 | 
0.80 | 1.60 | 2.40 | 3.20 | 4.00 | 
0.84 | 1.68 | 2.52 | 3.36 | 4.20 | 
0.88 | 1.76 | 2.64 | 3.52 | 4.40 | 
0.92 | 1.84 | 2.76 | 3.68 | 4.60 | 
0.96 | 1.92 | 2.88 | 3.84 | 4.80 | 
Смежные вопросы