gpt4 book ai didi

c - 如何在 scanf 中只接受一定的精度(这么多小数位)?

转载 作者:太空狗 更新时间:2023-10-29 15:00:27 25 4
gpt4 key购买 nike

scanf() 函数中我想只取十进制值。我们可以实现吗?例如,为了显示最多两位小数,我们使用 printf("%.2f",A) 我们如何为 scanf() 函数做到这一点。

最佳答案

scanf() 没有一个简单的方法来满足 OP 的目标。
推荐使用fgets() 进行输入,然后解析字符串。

char buf[20];
fgets(buf, sizeof buf, stdin); // Could add check for NULL here

为了限制在 2 位小数,代码可以读取部分数字:整数部分和分数,然后形成结果:

long long ipart;
unsigned d[2];
int n;
if (sscanf(buf, "%lld.%1u%1u %n", &ipart, &d[0], &d[1], &n) != 3 || buf[n]) {
Handle_InvalidInput();
}
double value = (d[0]*10 + d[1])/100.0;
value = ipart + ipart < 0 ? -value : value;

尽管这实现了 OP 的任务,但我认为它并没有解决 OP 的更大目标。因此,与其限制输入,不如读取输入然后限定它:

double value;
if (sscanf(buf, "%lf %n", &value, &n) != 1 || buf[n]) {
Handle_InvalidInput();
}
double rounded_value = round(value * 100.0)/100.0;
if (rounded_value != value) {
Handle_OverlyPreciseNumber(value, rounded_value);
}

其他更迂腐的方法会检查字符串 buf 是否有 ddd...ddd.dd 语法等。但问题很明确:读取数据然后限定读取的数据。不要试图限制输入。

关于c - 如何在 scanf 中只接受一定的精度(这么多小数位)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28132748/

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