> n;给我100?为什么 cin 以十进制值思考,而 scanf 以八进制值思考? 最佳答案 Fo-6ren">
gpt4 book ai didi

c++ - scanf 与 cin : string as integer processing

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:45 26 4
gpt4 key购买 nike

我有一个输入字符串“0100”

为什么 scanf("%i", &n); 返回 64 而 cin >> n;给我100?为什么 cin 以十进制值思考,而 scanf 以八进制值思考?

最佳答案

For the i specifier:   Any number of digits, optionally preceded by a sign (+ or -). Decimal digits assumed by default (0-9), but a 0 prefix introduces octal digits (0-7), and 0x introduces hexadecimal digits (0-f). - scanf - C++ Reference

由于您在 100 前添加了 0,因此它被读取为八进制而不是十进制。

更新:

Would you mind to add cin >> setbase(0) >> n to your answer? - Nicky C

//                           cin input:  0100
// base | n ='s
// ----------------------
cin >> setbase(0) >> n // *see below | 64
cin >> setbase(8) >> n // octal | 64
cin >> setbase(10) >> n // decimal | 100
cin >> setbase(16) >> n // hexadecimal | 256

* 调用 setbase( x ) 其中 x 不等于 81016 与调用 setbase(resetiosflags(ios_base::basefield)) 是一样的。 cin 的输入将被读取为 C 文字,这意味着 0 的前缀将是八进制,0x 将是十六进制,没有前缀将是十进制。

关于c++ - scanf 与 cin : string as integer processing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25434026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com