-2

このコードをコンパイルすると、

"[エラー] 不明なタイプ名 'days' ". 私は何を間違っていますか?

#include <stdio.h>

int main(void){

int k=0;
enum days {Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};

days dayVariable;

printf("Enter number of the day: ");
scanf("%d",&k);

dayVariable=days(k);

printf("%s", dayVariable);

return 0;

 }
4

4 に答える 4

4

C の場合は、次のように記述する必要があります。

enum days dayVariable;

...

dayVariable = (enum days)k;

タイプ名にしたい場合はdays、それをtypedefします:

typedef enum {Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday} days;

それ以外では、printf で間違った書式指定子を使用しています。

PS

C と C++ は異なる言語であることを忘れないでください。あなたのコードと誤解から、あなたが何らかの C++ のバックグラウンドを持っていることは明らかです。C プログラミングに関する本を手に取ってみてください。

于 2013-03-21T14:17:44.913 に答える
3

列挙型は文字列ではありません。実際には、Monday=0、Tuesday=1 などです。文字列を出力したい場合は、次のようにします。

char *days[] = {"Monday", "Tuesday", ... "Sunday"};

printf("%s", days[k]);
于 2013-03-21T14:17:29.717 に答える
1

Cでは、列挙型は通常の型と同じ名前空間にはありません。その列挙型として型指定された変数を定義する場合は、次のように実行できます。

enum days dayVariable;

または、列挙型の標準タイプを定義することもできます。これを行うには、同様の方法がたくさんあります。ここに1つあります:

typedef enum {
    /* ... */
} days;
于 2013-03-21T14:18:31.140 に答える
1

これもコンパイルされません:

dayVariable=days(k);

daysは関数ではなく、C では一般に型名 (そうであると思わdaysれる) も関数ではありません。次のことを意味する場合があります。

dayVariable = (enum days) k;

つまり、適切な型名への単純なキャストを使用します。

于 2013-03-21T14:23:32.287 に答える