【发布时间】:2020-12-13 09:14:29
【问题描述】:
我正在编写一个计算余弦的程序,我应该读取用户输入的角度(以度(°)或弧度(r)为单位)。如果角度以度为单位,则应将其转换为弧度(因此我使用了 if-else 语句)。但是,当我将 char 与 == 和单引号进行比较时,我收到以下警告:
warning: multi-character character constant [-Wmultichar]
if((unit != '°') && (unit != 'r'))
这是我的完整代码:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
// Prototype
void calc_cos(double, char);
int main (void)
{
double angle;
char unit;
printf("PLease give an angle and its unit in degrees (°) or radians (r) for cosinus calculation\n");
if((unit != '°') && (unit != 'r'))
{
printf("ERROR. Unit is not in '°' or 'r'. Aborting...\n");
return 0;
}
else
{
scanf("%lf %c", &angle, &unit);
calc_cos(angle, unit);
}
return 0;
}
void calc_cos(double angle, char unit)
{
double results=0;
if(unit == '°')
{
angle = angle*M_PI/180;
}
else if(unit == 'r')
{
angle = angle;
}
results = cos(angle);
printf("cos(%lf rad) = %lf\n", angle, results);
}
【问题讨论】:
-
警告(多字符)告诉你,
'°'不是char类型。 -
C 数据类型是在 UTF-8 和 Unicode 之前发明的。将
char视为“字节”的同义词。对于不在一个字节中表示的字符(例如处于 UTF-8 模式时的 º),您不能将它们存储在char中。您可以使用宽字符类型和实现定义的类型,或者设计自己的处理 Unicode 的方式(例如,使用uint32_t将 Unicode 代码点存储为 UCS-4)。 -
@goodvibration:在 C 中,没有字符常量是
char类型的。他们都是int。
标签: c char comparison single-quotes