3

わかりました、これは実際には C の質問ほど熱狂的な質問ではありません。

必要に応じて fizzbuzz を出力するための簡単なコードを C で書きました。

#include <stdio.h>

int main(void)
{
    int n = 30;
    int i;
    for (i = 1; i<=n; i++)
        printf("%s\n", (i % 15) == 0 ? "fizzbuzz" : (i % 5) == 0 ? "buzz" : (i % 3) == 0 ? "fizz" : i);
}

ここで、'i' が int であるのに対し、printf は文字列を受け入れるため、最後の else ステートメントは明らかに機能しません。私の質問は、「i」を文字列に変換するために適用できるキャストはありますか?

編集: 私が本当に求めているのは、この fizzbuzz テストが単一の print ステートメントを使用して実行できるかどうかです。それができるかどうかの好奇心以外に、単一の印刷ステートメントにしたい理由は特にありません。

EDIT2: 質問に答えて、これが私の実装です:

#include <stdio.h>

int main(void)
{
    int i, n=30;        
    for (i = 1; i<=n; i++)
        printf((!(i%3) || !(i%5)) ? "%s\n" : "%d\n", !(i % 15) ? "fizzbuzz" : !(i % 5) ? "buzz" : !(i % 3) ? "fizz" : i);
}

http://codepad.org/DN7yBW99

4

4 に答える 4

0

編集 申し訳ありません...このスレッドはCソリューション用であることに気付きました

再帰的な実装:

vector<string> FizzBuzz::execute(int n) {

    if(n == 0)
        return vector<string>();

    auto push = n % 15 == 0 ? "fizzbuzz" :
                n % 3 == 0 ? "fizz" :
                n % 5 == 0 ? "buzz" :
                to_string(n);

    auto execution = execute(n-1);
    execution.push_back(push);
    return execution;
}
于 2017-07-02T16:20:42.467 に答える
-1

提案どおり、使用できますitoa();。以下サンプルコード。

#include <stdio.h>
#include <stdlib.h>
int main(){
int num=23;
char snum[3];
itoa(num,snum,10);
printf("%s",snum);
}

itoa は を に変換するために使用さintstringます。パラメータは次のとおりです。

itoa(int num, char string [], int base);

最初のパラメーターは、変換する数値です。2 番目のパラメーターはchar、変換されたストロングを格納する文字列/配列です。最後に、3 番目のパラメーターは、変換する数値の基数です。

于 2015-04-11T07:01:29.387 に答える