C++ %f 点而不是逗号

Posted

技术标签:

【中文标题】C++ %f 点而不是逗号【英文标题】:C++ %f dot instead of comma 【发布时间】:2015-10-24 22:09:38 【问题描述】:

我正在读取 c++ 中的文件,其中浮点数 (%f) 使用点而不是逗号。

文件中的每一行都有 3 个这样的数字

1.000 -1.000 0.000

例如。

我的应用不想读取点后面的数字,所以如果我这样做了

fscanf(file, "%f %f %f\n", &x, &y, &z );

例如 x 设置为 1,其他所有内容都保留为 0,因为它只读取第一个点。

我已经在某处读到我应该使用 setlocale 或类似的方法更改语言环境,但没有成功。

有人可以解释一下如何正确地做到这一点,或者是否有其他方法?


编辑: 我从标题中删除了“QT”。首先它在那里是因为我认为 QT 可能有一些特殊的设置或针对语言环境的东西。奇怪的是,我的 ST3 默认 C++ Single File 构建系统已将语言环境设置为使用点而不是逗号,但我必须在 QT 中设置它。每个编译器都有自己的默认语言环境设置吗?

【问题讨论】:

“它没有成功”,你到底尝试了什么?事实是,只要你做对了,它就可以工作。请在您使用时提供一个最小的示例。哦,请解释一下 Qt(您的意思是“QT”吗?)与您的问题有什么关系。 如果你使用 fscanf,那不是 QT。 问题似乎与 C++ 或 Qt 无关。 我在名称中添加 QT 的原因是,如果我尝试相同的示例并使用 Sublime Text 3 中默认的“C++ Single File”构建系统编译它,它可以与点一起使用,但不会不使用逗号。这很奇怪,我什至没有设置任何语言环境。 【参考方案1】:

你可以添加行

setlocale(LC_ALL, "C"); 

在致电fscanf 之前。确保添加

#include <locale.h>

能够拨打setlocale

有关 setlocale 的更多信息,请访问http://en.cppreference.com/w/c/locale/setlocale。

【讨论】:

我将该行添加到代码中的错误位置,而不是 LC_ALL 我有 LC_NUMERIC。我将它放在main.cpp 文件中,而不是我使用fscanf 的实际函数中。谢谢。

以上是关于C++ %f 点而不是逗号的主要内容,如果未能解决你的问题,请参考以下文章

无论语言环境如何,我如何强制使用点而不是逗号的 Swift Decimal Pad?

爱沙尼亚语(et-EE)语言环境中的小数分隔符在 Windows 服务器中以点而不是逗号的形式出现

用点解析双精度为逗号

Mac Excel 2016 - 图表上的小数点而不是逗号

C++中逗号表达式的应用

C ++:处理子字符串本身带有逗号的逗号分隔字符串的最简单方法? [关闭]