关于枚举的输入输出

kaiseer8828 2013-01-03 10:00:25
例如:
1 #include<stdio.h>
2
3 typedef enum {A=1,B,C,D} SchoolName;
4 int main(int argc ,char * argv[])
5 {
6 SchoolName school=0;
7 printf("enter school\n");
8 scanf("%d",&school);
9 printf("school=%d\n",school);
10 return 0;
11 }

编译报警高了:
test04.c: In function ‘main’:
test04.c:8:2: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘enum SchoolName *’ [-Wformat]

枚举输入输入正确的写法是什么?
...全文
151 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2013-01-04
  • 打赏
  • 举报
回复
没 错。
赵4老师 2013-01-04
  • 打赏
  • 举报
回复
#include <stdio.h>
typedef enum {A=1,B,C,D} SchoolName;
const char *e2s(int e) {
    static const char e2str[5][2]={"0","A","B","C","D"};
    if (!(1<=e && e<=4)) e=0;
    return e2str[e];
}
int main(int argc ,char * argv[])
{
    SchoolName school=0;

    while (1) {
        printf("enter school(1|2|3|4):\n");
        rewind(stdin);
        if (1==scanf("%d",(int *)&school)) {
            if (1<=school && school<=4) break;
        }
    }
    printf("school==%d==%s\n",school,e2s(school));
    return 0;
}
kaiseer8828 2013-01-03
  • 打赏
  • 举报
回复
那就是说我这样用并没有错??
ForestDB 2013-01-03
  • 打赏
  • 举报
回复
此警告可以如下消除 scanf("%d",(int *)&school);
JoeBlackzqq 2013-01-03
  • 打赏
  • 举报
回复
枚举当整数用就行了,所以输入输出当整数看就好。 gcc下无编译警告,see:

[feng@other #15]$cat a.c
#include<stdio.h>

typedef enum {A=1,B,C,D} SchoolName;

int main(int argc ,char * argv[])
{
        SchoolName school=0;
        printf("enter school\n");
        scanf("%d",&school);
        printf("school=%d\n",school);

        return 0;
}
[feng@other #16]$make
gcc -o a a.c
[feng@other #17]$./a
enter school
3
school=3
[feng@other #18]$

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧