0

次のコードでは、プログラムの最後に 1 つprintfを使用して 12 時間制の時刻を出力したいのですが、変数に格納されている値に応じて午前または午後を出力したいと考えていますam_pm

正しく覚えているかどうかはわかりませんが、文字を int (または浮動小数点数?) に格納できると読んだと思いました。もちろん、型エラーが発生しているので違法に思えます。

また、配列を使用してこれを行うことができることも読みましたが、配列についてはまだ学んでおらず、そのような問題のより簡単な代替手段があるかどうか疑問に思っていました.

printf別の方法として、文字列の最後に単に「am」と入力する 1 つと「pm」と入力する 2 つの 's を単純に使用することを知っていますが、それは冗長に思えます。

#include <stdio.h>

int main(void) {

int hour, minutes, am_pm;

printf("Enter a 24-hour time:"); scanf("%d:%d", &hour, &minutes);
if (hour > 12) 
    {
    hour = (hour - 12); 
    am_pm = "pm"; // ERROR 
    }
else
    am_pm = "am";  // ERROR

printf("Equivalent 12-hour time: %.2d:%.2d%d", hour, minutes, am_pm);

} // end main 

上記でやろうとしていることと同様のことをするにはどうすればよいですか? Python では、単純に print("equivalent time is:" + hour + minutes + am_pm) のようなことを行うことを知っています。

4

4 に答える 4

3

int には 1 文字を格納できます。int の値は、文字の ASCII コードです。また、int ごとに 1 文字のみです。それはおそらくあなたが(間違って)覚えていたことです。

他の人が書いたように、 am_pm を a として宣言するchar *か、さらにはa として宣言しconst char *ます。はconst、指している文字列が読み取り専用であることをコンパイラに伝えます。

別のオプションは、「a」または「p」を int として am_pm に格納することです。

am_pm = 'p'; // Note single quotes for character (double quotes for strings)

そして書く

printf("Equivalent 12-hour time: %.2d:%.2d%cm", hour, minutes, am_pm);

%c は am_pm を文字として解釈することを意味します。これは、「am」/「pm」の最初の文字だけが変わるという事実を利用しています。

于 2012-12-18T08:33:18.150 に答える
2

文字列リテラルを int に格納することはできません!

次のように宣言am_pmします。

char *am_pm;

を使用して印刷し%sます。

printf("Equivalent 12-hour time: %.2d:%.2d%s", hour, minutes, am_pm);
于 2012-12-18T08:30:43.003 に答える
2

まず、am_pm が int として宣言されており、その下の数行で文字列を割り当てようとしています。これは違法です。他の回答は、これを修正する方法を示しています。私は別の解決策を追加します:

#include <stdio.h>

int main(void) {

int hour, minutes;
int is_pm = 0;

printf("Enter a 24-hour time:"); scanf("%d:%d", &hour, &minutes);
if (hour > 12) 
{
    hour = (hour - 12); 
    is_pm = 1;
}


printf("Equivalent 12-hour time: %.2d:%.2d%s", hour, minutes, (is_pm)?"PM":"AM");

} // end main 

これが奇妙に思える場合は、「疑問符演算子」について読んでください。

于 2012-12-18T08:34:45.870 に答える
1

const char *for を使用しますam_pm。たとえば、次のように変更します。

int hour, minutes, am_pm;

... 

printf("Equivalent 12-hour time: %.2d:%.2d%d", hour, minutes, am_pm);

に:

int hour, minutes;
const char * am_pm;

...

printf("Equivalent 12-hour time: %.2d:%.2d %s", hour, minutes, am_pm);
于 2012-12-18T08:30:43.887 に答える