将C++代码与C代码匹配

3

我正尝试理解C语言代码。在这里,我正在尝试使用C++中的代码来复制这个代码。更具体地说,我正在尝试使用iostream和iomanip代替printf和cstdio将此代码从printf转换为cout。

//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";
    }


}

看起来除了C++代码中的10.0549变成了10.055之外,大部分都是正确的。
您有什么想法,我的C++代码出了什么问题吗?尽管如此,可能还有其他几个错误,因为我还很新,对理解C语言还不太熟悉。


2
原始代码已经混合了典型的 [tag:c] 代码和 [tag:c++] 代码吗? - πάντα ῥεῖ
2
原始代码是C++,而不是C。 - nmichaels
1
对于给定的示例,原始“C”代码中的C++方面在我的看法中相当无关紧要,因为它对输出没有影响,而发帖者正在专注于输出。技术上讲,这是正确的,这不是C语言。 - Devolus
C++中使用类似于C语言的强制类型转换存在问题吗? - zoska
如果您想保留格式代码,您可能会对 http://sf.net/projects/iof 上的 iof 库感兴趣。虽然它已经有一段时间没有更新了,但它非常好用且无需构建(全部都是模板)。 - Oliver
显示剩余5条评论
1个回答

3

您希望使用std::fixed和设置4位小数以复制printf的%.4f

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

输出:

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

关于 std::setprecision 和 std::fixed,更多信息请参见此处


那个输出不正确。第一行给出的是<383, 4.20879>,而不是正确的<383, 4.2088>。虽然它确实得到了最后一行的正确结果。 - Mdjon26
哦,好了。现在应该已经修复了。(无恶意双关语) - mshildt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接