这个问题类似于我之前问的一个问题,为什么在扫描文件时没有从scanf(c Linux vi)中获得正确的字符值。
我从这个问题的答案中了解到,在阅读字符时,可以使用类似scanf的scanf("%c")跳过空格和白线。有没有这样的捷径,你也可以用金钱工作?假设用户在标准in中键入4.22美元。有没有一个scanf可以让你跳过特殊字符,然后将金额解释为浮动?或者你只需要先扫描字符,然后扫描浮动金额?
如果您确定会有一个$,那么您可以将其包含在格式中,如scanf("$%d.%d",&dollars,¢s)。试试看!
$ cat scan.c
#include <stdio.h>
int main()
{
int dollars, cents;
scanf("$%d.%d", &dollars, ¢s);
printf("That's %d dollars and %d cents.n", dollars, cents);
return 0;
}
$ make scan
cc scan.c -o scan
$ ./scan
$4.22
That's 4 dollars and 22 cents.
$
有没有这样的捷径,你也可以用金钱工作?
不幸的是,不,不是作为语言本身的一部分。但肯定存在这样一个图书馆,你可以使用。您只需要麻烦地编译/链接它,并确保在动态链接的情况下分发它。
跳过特殊字符,然后将金额解释为浮动?
注意!不要将货币表示为浮点数。它用来近似实数的行为不适合货币。它将引入不准确之处。
每个计算机科学家应该知道的关于浮点运算的知识是一个流行的参考(尽管可能有点压倒性)。