在大学里,我们必须编写一个带结构,枚举和联合的程序来显示日期, 喜欢1. 2014年9月。 我在打印枚举时遇到了一些问题。我在这个论坛找到了一些解决方案,最后我再也没有出现控制台错误了。但每次我尝试运行我的程序时都会崩溃。 也许你们中的某个人知道造成这次事故的原因:
#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;
}
答案 0 :(得分:1)
使用GDB。这是Gnu DeBugger。使用启用的-g
选项编译代码,它将包含所有正确的调试符号。然后,您可以使用GDB在程序中放置一个手动中断,一次一行地查看它,查看变量,并确切地看到它崩溃的位置。
答案 1 :(得分:0)
你怎么能有这样的多角色字符:
struct Datum Heute = {'3','12',2014};
你的编译器不会发出警告吗?理想情况下应该
答案 2 :(得分:0)
似乎我忽略了MultiCharacter警告...... 当我选择一个字符的月份时,它仍会在第二次打印时冻结,当我想使用char作为月打印日期时。月份的其他两种类型(通过枚举)工作完全正常。 我们的任务是使用所有三种月打印打印三个不同的日期。
我想我知道问题:
enum Monate monat2=(*datum).monat.alsMonat;
printf("Monat: %s\n",welcherMonat(monat2));
当我给函数一个char而不是一个枚举时,&#34; monat2&#34;是空的。 但我怎么能检查我是否给他一个字母或枚举?