c - 使用c中的scanf将字符输入到枚举变量中
问题描述
大家好,我需要为大学编写一个使用枚举组织队列的程序,但我在枚举方面遇到了很多问题。
int main() {
enum priority {
L , l, n, h, H //Todo: Priority enum Lowest = 0 Highest = 4
};
char option = 'X';
printf("Priority: ");
scanf(" %c", &option);
enum priority priorityvar = option;
printf("%d", priorityvar);
问题是当我扫描变量priorityvar总是设置为文字字符并且枚举没有被识别的char时,我无法将它直接读入变量,因为编译器给我警告说我无法寻址带有 %d 或 %c 的枚举类型变量。有人知道如何解决这个问题吗?我觉得如果没有枚举,这本可以更容易解决,但我必须使用枚举来解决 uni 的任务
解决方案
您需要将表示数字的 char 转换为其整数值。
enum priority priorityvar;
if(isdigit((unsigned char)option && option >= '0' && option < '5') priorityvar = option - '0';
else { /* wrong input - handle error*/ }
或者如果你想要代表优先级的字母:
switch(option)
{
case 'L':
priorityvar = L;
break;
case 'l':
priorityvar = l;
break;
case 'n':
priorityvar = n;
break;
case 'h':
priorityvar = h;
break;
case 'H':
priorityvar = H;
break;
default:
/* handle error */
break;
}
推荐阅读
- javascript - 如何使用 if 语句关闭悬停效果
- laravel - Docker 上的 Laravel 的 MySQL 访问被拒绝
- python - Python: sorted insert into list
- html - 是否可以使用 CSS flexbox 在垂直和水平两个轴上收缩/拉伸内容?
- xml - 将 XML 文件复制到雪花表时捕获 XML 文件名
- sql - 'ORA-01843: not a valid month' 但格式正确?
- php - 我提出的每个请求都得到不同的 php 会话 ID。角前端
- r - 为什么 ggplot2 中的 ylim() 函数被忽略?
- sql-server - 如何从 SQL Server 中的 select 语句中设置变量
- javascript - 为什么导航栏不固定到顶部?