printf撇号在C中用Æ代替

时间:2012-01-24 22:56:10

标签: c windows string formatting

这是我的第一个comp sci赋值的一部分,我们正在编写一个C程序来评估几个方程。这是给出了不稳定结果的代码:

// 1. Newton’s Second Law of Motion
printf("Newton's Second Law of Motion \nPlease enter mass and acceleration as decimal-point values separated by a comma (ex. 150.0,5.5): ");
scanf("%lf, %lf", &mass, &accel);
printf("Newton’s Second Law of Motion: force = mass * acceleration = %lf * %lf = %lf\n\n\n", mass, accel, mass*accel);

当程序运行时,第一个printf显示正常,但第二个显示“牛顿”而不是“牛顿”。

4 个答案:

答案 0 :(得分:8)

您使用的是UNICODE吗?

似乎撇号有所不同:Newton’s vs Newton's。你是从某个地方复制粘贴的吗?

答案 1 :(得分:5)

具有值0x92的单字节字符将在不同系统上以不同方式显示,具体取决于当前有效的代码页。

Code page 437(美国常见)为此值显示Æ个字符。

其他代码页,例如codepage 1252(西欧),显示

答案 2 :(得分:2)

撇号有两种不同的字符。第一个'是ASCII字符集的一部分,它位于所有现代字符集的基础上,并且在所有字符集中都是相同的。第二个是一个扩展字符,它不是基础的一部分,并根据您的字符集或代码页进行不同的解释。字符Æ位于Windows-1252编码的位置0x00c6。

答案 3 :(得分:1)

这里最有可能发生的是您从源中复制文本而不是手动输入文本。该源可能具有UNICODE编码字符而不是7/8位ASCII字符。

我可能错了,但我相当确定printf只支持8位ASCII,因此截断了UNICODE widechar撇号的主要数据。

您想要的字符是0x27(十进制39)'

您键入的字符为十进制92',具体取决于代码页可能会显示为Æ

我希望能够清除它。