-1

forループで、printfを使用して現在のi値を出力しようとしています。この行:printf((char *) i);実行時エラーが発生します。どうしてこれなの?!

以下は、これを実行している簡単なfizzbuzzソリューションです。

void FizzBuzz()
{
    for (int i = 0; i < 20; i++)
    {
        printf((char *)i);
        if ((i % 3 == 0) && (i % 5 == 0))
        {
            printf("FizzBuzz \n");
        }
        else if (i % 3 == 0)
        {
            printf("Fizz \n");
        }
        else if (i % 5 == 0)
        {
            printf("Buzz \n");
        }
        else 
        {
            printf("%d\n", i);
        }
    }
}
4

5 に答える 5

6

それはどのように機能するかではないからprintfです。代わりにこれが必要です:

printf("%d\n", i);

またはさらに良い、

std::cout << i;
于 2009-11-24T03:35:44.277 に答える
3

C++ を使用している場合は、printf の代わりに cout を使用する必要があります。

#include <iostream>
using namespace std;

int main() {
        int i = 42;
        cout << "The answer is: " << i << endl;
}
于 2009-11-24T03:40:01.913 に答える
2

そのステートメントによって、あなたが言っていることは次のとおりです。書式文字列 %d を使用して整数を出力します

于 2009-11-24T03:44:14.883 に答える
2

printf が機能する方法は、次のような文字列を取ることです。

printf( "the number is: " );

文字列の最後のセクションに整数が必要な場合は、エスケープ文字を使用して、int を別のパラメーターとして渡す必要があります。

printf( "the number is %d", i );

使用できるエスケープ文字の詳細については、こちらを参照してください。

以下も含める必要があります。

#include <stdio.h>

編集

申し訳ありませんが、用語が間違っていました。 % に続くシーケンスは、エスケープ文字ではなく変換仕様と呼ばれます。

HTH。

于 2009-11-24T03:48:19.540 に答える
1

の最初の引数printf()は、C スタイルのヌル終了文字列です。%残りの引数を出力するためのフォーマット シーケンスを含むフォーマット (したがって "f") として使用することを意図しています。

を使用することにより、ヌルに遭遇するまで、指すprintf((char *) i);アドレスから始まるすべてのバイトを印刷するようにコンピューターに指示します。i残念ながら、i通常カウンターに使用されることを考えると、メモリが非常に少ないことを示している可能性があります。最近のほとんどのオペレーティング システムは、バグがセキュリティ ホールを作成するのを防ぐために、ユーザー空間プログラムからそのようなメモリへのアクセスを禁止し、問題のあるプログラムに信号を送信します。このようなシグナルに対するデフォルトの応答は、トラップしない限り、プロセスを強制終了することです。

に格納されている数値を代わりに表示するにはi、 を使用しますprintf("%d\n", i);。の値をi文字として表示するには、putc((char)i);またはを試してくださいprintf("%c\n", i);i本当に が文字へのポインターである場合は、 を試してくださいputc((char)(*i));

于 2009-11-24T03:50:40.800 に答える