【发布时间】:2014-12-05 16:36:09
【问题描述】:
在大学里,我们必须编写一个包含结构、枚举和联合的程序来显示日期, 比如 2014 年 9 月 1 日。 我在打印枚举时遇到了一些问题。我在这个论坛中找到了一些解决方案,最后我再也没有控制台错误了。但是每次我尝试运行我的程序时它都会崩溃。 也许你们中的某些人知道导致崩溃的原因:
#include <stdio.h>
enum Monate{JANUAR = 1,
FEBRUAR = 2,
MAERZ = 3,
APRIL = 4,
MAI = 5,
JUNI = 6,
JULI = 7,
AUGUST = 8,
SEPTEMBER = 9,
OKTOBER = 10,
NOVEMBER = 11,
DEZEMBER = 12 };
union Monat{
enum Monate alsMonat;
char alsZahl;
char alsString[10];
};
struct Datum {
char tag;
union Monat monat;
short jahr;
};
const char* welcherMonat(enum Monate meinMonat){
switch(meinMonat){
case JANUAR: return"Januar";
break;
case FEBRUAR: return"Februar";
break;
case MAERZ: return"Maerz";
break;
case APRIL: return"April";
break;
case MAI: return"Mai";
break;
case JUNI: return"Juni";
break;
case JULI: return"Juli";
break;
case AUGUST: return"August";
break;
case SEPTEMBER: return"September";
break;
case OKTOBER: return"Oktober";
break;
case NOVEMBER: return"November";
break;
case DEZEMBER: return"Dezember";
break;
}
}
void ausgabe(struct Datum *datum){
char month[10]=" ";
printf("Tag: %c\n",(*datum).tag);
enum Monate monat2=(*datum).monat.alsMonat;
printf("Monat: %s\n",welcherMonat(monat2));
printf("Jahr: %d\n\n",(*datum).jahr);
}
int main(int argc, char** argv){
struct Datum Geburtstag = {'3',AUGUST,1995};
struct Datum Heute = {'3','12',2014};
struct Datum Millenium = {'1',1,2000};
ausgabe(&Geburtstag);
ausgabe(&Heute);
ausgabe(&Millenium);
return 0;
}
【问题讨论】:
-
附注:1.
return之后不需要break,2.(*foo).bar最好写成foo->bar -
另外,在调试器中运行你的程序,看看它在哪一行崩溃。
-
你能发布堆栈跟踪吗?
-
'12',一个多字节字符文字,与您的welcherMonat()函数中的任何枚举标记都不匹配,这导致该函数返回一个垃圾值,printf()得到一点点脾气暴躁... -
在英文帮助环境中寻求帮助之前,在代码中使用英文。