我的程序怎么会出现error C2041: illegal digit '9' for base '8'这种问题

来源:百度知道 编辑:UC知道 时间:2024/09/24 23:43:25
#include<stdio.h>
#include<string.h>
struct date
{
int month;
int day;
int year;
};
struct worker
{
int num;
char name[20];
struct date birth;
int wage;
}work[5]={{01,"zhang",07,19,1989,1900},{02,"zhao",05,16,1982,1200},{03,"wang",04,22,1986,2000},{04,"wang",06,12,1987,1200},{05,"hou",09,30,1990,1000}};
void main ()
{
int i,max,t;

for(i=0,max=work[0].wage;i<5;i++)
{
if(max<work[i].wage)
{
max=work[i].wage;
t=i;
}
}
printf("工资最高的工人的工号为%d\n姓名为%s\n生日为%d年%d月%d日\n工资为%d元\n",work[t].num,work[t].name,work[t].birth.year,work[t].birth.month,work[t].birth.day,work[t].wage);
}

因为在C语言里面,以数字0打头的数字串被解释为8进制数(就是你得到的error里面的octal),由于8进制数中最大的数字是7(就像10进制中最大的数字是9一样),而09被解释成为8进制数显然不对,所以error说9是在8进制下是非法数字。注意到你02,06,07等显然没有问题,这些数字都小于等于7。要解决这个问题并不难,你把09改成0x09就可以了,0x09是以0x打头,C语言解释成16进制数,就是说现在允许出现在某一数位上的最大数字是F(16进制下表示10进制的15),9显然符合要求。其实你的写法没太大作用,printf打印的时候不会打印出打头的0的,对于02,05,07之类倒还可以通过%#o说明符做到,但是0x09办不到,我建议你把年月日都声明为字符串(printf里面相应的%d改成%s)。当然还有其他办法,不过这个是最直接的。