2014-01-10 4 views
3

Я пытаюсь понять C-код. Здесь я пытаюсь реплицировать этот код в C с кодом на C++. Или, в частности, я пытаюсь преобразовать этот код из printf в cout с помощью iostream и iomanip вместо printf и cstdio.Соответствие кода на C++ с кодом C

//C CODE 
#include <cstdio> 
#include <cstdlib> 
using namespace std; 

int main() { 
string header_text = "Basic IO"; 

srand(0); 
printf("%-10s::\n", header_text.c_str()); 
for (int i=0; i<4; i++) { 
int number1 = rand()%1000; 
float number2 = (float)number1/91.0; 
printf("<%3d, %7.4f>\n", number1, number2); 
} 
printf("\n"); 
} 

И теперь я хочу преобразовать это в C++.

Вот моя попытка:

//C++ code 
#include <iostream> 
#include <iomanip> 
#include <cstdlib> 
using namespace std; 
int main() { 
    string header_text = "Basic IO"; 

    srand(0); 
    cout << setw(10) << left << header_text << "::\n"; 

    for (int i=0; i <4; i++) { 
     int number1 = rand()%1000; 
     float number2 = (float)number1/91.0; 
     cout << "<" <<number1 <<setw(3) << "," <<setw(7) << setprecision(5) << number2 << ">\n"; 
    } 


} 

Похоже, это в основном правильно, кроме 10,0549 становится в коде C++ 10,055. Любая идея, что не так с моим кодом на C++? Хотя, может быть несколько больше ошибок с этим, как я все еще очень новое для понимания C.

+2

Оригинальный код уже смешивает типичный [тег: c] код с [тег: C++] ?? –

+2

Исходный код - C++, а не C. – nmichaels

+0

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

ответ

3

Вы хотите использовать станд :: фиксированной и setprecision 4 реплицировать Printf-х %.4f:

cout << ... << fixed << setprecision(4) << number2 << ">\n"; 

Выход:

Basic IO :: 
<383, 4.2088 > 
<886, 9.7363 > 
<777, 8.5385 > 
<915, 10.0549> 

См here for more info на станд :: setprecision и станд :: фиксированы.

+0

Не получается получить правильный результат. Это дает мне <383, 4.20879> для первой строки вместо <383, 4.2088> , которая является правильной. Хотя, он делает последнюю строку правильной. – Mdjon26

+0

Дох. Хорошо, теперь нужно исправлять. (Каламбур не предназначен). – mshildt

Смежные вопросы