2011-07-07 8 views
1

私はこれがおそらくここのほとんどの人にとって非常に単純化するだろうと知っていますが、私はこれで初めてです。私はCプログラムのprintf/scanf行にその名前を使用して変数値を別の変数に代入しようとしています。ここでは、コードです:別の変数の値を代入する

int day, month, counter; 
int sunday = 0; 
int monday = 1; 
int tuesday = 2; 
int wednesday = 3; 
int thursday = 4; 
int friday = 5; 
int saturday = 6; 

printf("Enter how many days in the month:\n"); 
scanf("%i", &month); 

printf("Enter what day the month starts on:\n"); 
scanf("%i", &day); 

これはちょうどそれの一部ですが、私がやろうとしていると、ユーザーはそれが呼び出す二のprintf/scanfのラインに実際の日数名を入力するように、それ作るですintの値を曜日の値に代入します。問題は、それが動作していないと私は理由を知らないです。

+3

何が問題なのですか? – Constantinius

+0

"実際の曜日の名前"を入力するとどういう意味ですか?あなたが "sunday、monday"などと入力している場合は、なぜそれを 'int'に格納していますか? – Balanivash

+0

私は彼がコマンドラインで変数名を入力し、その変数のどこかに格納されているintを使用したいと思うと思います。私は彼が列挙型を使用しているように私に聞こえます... –

答えて

2

あなたは(scanfが実行されている場合、キーボードから変数の名前を入力します)Cでこれを行うことができない、これはスクリプト言語ではありません。基本的に、すべての変数の名前はコンパイルステップ中に失われます(デバッグ情報として保存されますが、gdbなどのデバッガで使用されますが、通常は実行時にこれを使用しません)。

あなたは、例えば、%sscanf介して入力文字列(タイプchar*又はchar []とchar配列)をし、その後、手でそれを解析する必要があり

char string[50]; 
scanf("%s", string); 
if(strcmp(string, "monday") == 0) 
    day = 1; 
else if (strcmp(string, "tuesday") == 0) 
    day = 2; 

などとなる。

+0

私はこれが私の質問に答えると思います。私が言ったように私はこれで新しいので、それについて私を打ち負かさないでくれてありがとう。 – andrew

+2

誰もが同じ状況になっていました:) – osgx

+2

彼はすでに "bash"を文章で使っています...この力は力強いです。 –

1

プログラムによって既に読み込まれた文字列(整数ではない)をスキャンし、それを適切な値に変換する機能を、プログラムを使用するプログラムに書き込む必要があります。おそらく大文字と小文字を区別せず、有効な(一意の)略語(Sa、Su、M、Tu、W、Th、Fなど)を受け入れることができるようにするべきでしょう。曜日名前の代わりに数字。これらの関数の複雑さを増す国際化やI18N(サメディ、Dimanche、ルンディ、マルディ、メルデレディ、ジュディ、ベンドレディ、フランス語などのI、N、S、D、L、J、 (ただし、それらを使用するコードの複雑さにはなりません)。

Cはこれを直接行う方法を提供しません。最も近いアプローチはPOSIX strptime()であり、私はそれが充実しているとは思わない。

0

符号付き整数(%i)を受け入れるscanfを実行すると、それ以上の整数は期待できません。ユーザーが文字列を入力した場合(sundayと言うと、その日に '0'の値を受け取るようにするには)別の方法でそれを行う必要があります。

データを入力する前に(printf("Enter the format of day ('n' for name, 'd' for number:\n")フォーマットを挿入するようにユーザーに頼むことができます。ユーザーの選択に応じて、別のスキャンを行うことができます。f:「n」を選択すると、譲渡して妥当な数値を見つけることができます。

私はあなたのコードの改善を示唆することができます場合は、別の日または配列または構造体または列挙体を宣言する必要があります。

+0

"'n'は名前、 'n'は数字 ''はあなたが望むものを得ることはできません。 –

+0

名前は「n」、数字は「d」を意味します。今私は訂正します – DonCallisto

2

初心者の方には、そういうものがあります。

int day, month, counter; 
char *dofw[] = { "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday", NULL}; 
char day_string[20]; 

printf("Enter how many days in the month:\n"); 
scanf("%d", &month); 

printf("Enter what day the month starts on:\n"); 
scanf("%20s", day_string); 

int i; 
day = -1; 
for(i=0; dofw[i]; i++) { 
    if(strcmp(day_string, dofw[i]) == 0) { 
    day = i; 
    break; 
    } 
} 
if(day == -1) 
    printf("User Y U not give good day\n"); 
関連する問題