C enum打印错误?

时间:2014-12-05 16:36:10

标签: c struct enums unions

在大学里,我们必须编写一个带结构,枚举和联合的程序来显示日期,  喜欢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;
}

3 个答案:

答案 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;是空的。 但我怎么能检查我是否给他一个字母或枚举?