为啥 setprecision 会出错?啥是setprecision

Posted

技术标签:

【中文标题】为啥 setprecision 会出错?啥是setprecision【英文标题】:Why the setprecision do error ? and what is setprecision为什么 setprecision 会出错?什么是setprecision 【发布时间】:2016-02-26 12:08:45 【问题描述】:

我的老师给了我这个,我在添加时出错了

«setprecision(3) <<setiosflags(ios::fixed) »

你能告诉我为什么吗?

#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;
main()

    float x1,y1,x2,y2,x3,y3,x4,y4,PQ,QR,RS,SP,Keliling;
    cout << "Masukkan koordinat empat titik berbeda (x,y) :\n";
    cout<< "P(x,y):" ;
    cin >> x1>>y1 ;
    cout <<"\n" ;
    cout << "Q(x,y) :" ;
    cin >> x2>>y2 ;
    cout <<"\n" ;
    cout << "R(x,y) :" ;
    cin>> x3>>y3 ;
    cout <<"\n" ;
    cout << "S(x,y) :" ;
    cin >>x4>>y4;
    cout <<"\n" ;

    PQ = sqrt(pow(x2-x1,2)+pow(y2-y1,2));
    QR = sqrt(pow(x3-x2,2)+pow(y3-y2,2));
    RS = sqrt(pow(x4-x3,2)+pow(y4-y3,2));
    SP = sqrt(pow(x1-x4,2)+pow(y1-y4,2));

    Keliling = PQ+QR+RS+SP;
    cout << "Kelilingnya adalah " << Keliling <<" satuan";
    «setprecision(3) <<setiosflags(ios::fixed) »
    return 0 ;

【问题讨论】:

你的老师给你的,代码用引号括起来。你对引号不熟悉吗? 【参考方案1】:

因为您误解了说明。您不能在程序末尾将其转储到自己的代码行中并期望它神奇地工作,并且您不能在其上保留法文引号。

您需要从逻辑上思考您的程序的功能以及顺序。你想完成什么,你如何告诉计算机如何帮助你完成它?

一个好的开始是谷歌搜索setprecision 以了解它是什么以及如何使用它。

此外,您的程序还有其他问题,例如缺少main 的返回类型。

【讨论】:

IIRC 如果返回类型为int,则可以省略。与int 参数类型相同。所以foo(a, b) return a + b; 是有效的。编辑:int 函数的省略似乎没问题,但参数类型的省略不是 kosher。 @erip:不,它不能。 C++ 不是 C。 @erip:GCC 在旧的非严格模式下接受它并不意味着它是一个有效的 C++ 程序(它不是)。打开编译器警告。默认情况下,GCC 在编译 C++ 代码时启用了许多保留 C 功能。 明白。试图找到一个标准报价,但无法快速扫描。我发现最接近的是 [basic.start.main] 2:[main] 的返回类型应为 int @erip:实际上,除了整个语法和说函数具有返回类型并定义函数声明中的位置的规则之外,没有什么可以引用标准的。根本没有规则说你可以省略它。但是,非规范兼容性部分 [C++14: C.1.6] 在标题为“禁止隐式 int”的部分下描述了这在 C 中是如何有效的,而在 C++ 中不再适用。 (我没有 C++98 的章节号,但它也会在那里,表明这几乎不是最近的变化!)【参考方案2】:

sestprecision 是一个操纵器,您可以将其传递到cout 流中以定义应在逗号后显示多少位数字,例如:

    cout << setprecision(2) << 0.122312 << endl;

将导致

    0.12

它会导致错误,因为您没有将它放入流中,而是 nowhere - 这不是一个语句!

【讨论】:

那么 setiosflags (ios::fixed) 的含义是什么?谢谢之前 允许你添加一些格式标志(比如大写)-take a look at this reference-我很确定你会发现更多有趣的信息【参考方案3】:

该行的问题是它不是有效的cpp语句

setprecision 语句需要连接到输出流,因为您使用的是标准输出。修正会是这样的

cout << setprecision(2) << fixed << endl;

正如preferencebean 所述,您的主函数应该包含一个返回类型。

int main() 

  //code;

【讨论】:

以上是关于为啥 setprecision 会出错?啥是setprecision的主要内容,如果未能解决你的问题,请参考以下文章

为啥当我推送我的应用程序时我的 cli 会出错? [复制]

php啥是魔术方法

java讨论:啥是多态和接口,为啥需要?

简述啥是vlan为啥要进行vlan划分

【分享】啥是API网关?大公司为啥都有API网关?

为啥需要node js,啥是框架