因此我尝试使用字符串方法来改进代码来解决各种语言中的 FizzBuzz 挑战。我被困在 C 语言中,因为这里的工作方式不同。 这是我的代码,我遇到错误,任何人都可以向我解释它们并帮助获得正确的代码。
#include<stdio.h>
#include<string.h>
int main()
{
int i,n;
char output;
printf("Enter Range: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
if(i%3==0)
strcat(output,"Fizz");
if(i%5==0)
strcat(output,"Buzz");
if(output=="\0")
strcat(output,i);
printf("\ni");
}
printf("\nEnd.\n");
return 0;
}
谢谢。
@阿什维尼·辛格
您的代码中有一些错误,
1) 您将
output
变量声明为 char 数据类型并在 char 中的 Fizz/Buzz
中连接字符串。那么如何将字符串(这是一个字符数组)的值放置在字符output
中。
2) 您将整数值
i
与字符 output
连接起来,例如 strcat(output,i)
。我们需要首先将整数值 i
转换为 char/string 数据类型,然后与 output
连接。
FizzBuzz 程序的条件是,
1) 如果数字是 3 的倍数,则在结果字符串中添加 Fizz
2) 如果数字是 5 的倍数,则在结果字符串中添加 Buzz
3) 如果数字既不是 3 的倍数也不是 5 的倍数,则在结果字符串中添加数字
代码:
#include<stdio.h>
#include<string.h>
int main()
{
int i,n;
char output[100]=" ";
printf("Enter Range: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
char s[] = {'0' + i, '\0'};
if(i%3==0)
strcat(output,"Fizz ");
else if(i%5==0)
strcat(output,"Buzz ");
else
strcat(strcat(output,s)," ");
}
puts(output);
return 0;
}
输出:
Enter Range: 10
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz
我想我已经找到了一个很好的解决方案,我还没有找到许多其他使用字符串的 C 语言 Fizzbuzz 解决方案,所以这里是:
#include <stdio.h>
#include <string.h>
int main() {
int i, length;
printf("Length of FizzBuzz: ");
scanf("%d", &length);
char output[1000] = " ";
for (i = 1; i <= length; i++) {
if (i % 3 == 0) {
strcat(output, "Fizz");
}
if (i % 5 == 0) {
strcat(output, "Buzz");
}
if ((i % 3 != 0) && (i % 5 != 0)) {
char istr[50];
sprintf(istr, "%d", i);
strcat(output, istr);
}
strcat(output, " ");
}
strcat(output, "\n");
printf(output);
return 0;
}
虽然我没有动态生成输出的大小,但 1000 对于 Fizzbuzz 中通常使用的 100 来说效果很好。