【发布时间】:2018-09-23 06:45:46
【问题描述】:
所以我尝试使用字符串方法来解决各种语言的 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;
}
谢谢。
【问题讨论】:
-
你遇到了什么错误?
-
output是char即一个字符,而不是字符串。你的 strcat 调用都不好。你应该回到一本关于字符串和打印的好 C 书或教程,你的一个 printfs 也是可疑的。 -
您的编译器在完全启用时应该警告
char output; ... strcat(output,"Fizz");。你用的是什么编译器? -
GCC。错误:FizzBuzz_Modified.c:16:18: 警告:与字符串文字比较的结果未指定(使用 strncmp 代替)[-Wstring-compare] if(output=="\0") ^ ~~~~ FizzBuzz_Modified.c :17:27:警告:不兼容的整数到指针转换将“int”传递给“const char *”类型的参数 [-Wint-conversion] strcat(output,i); ^ /usr/include/secure/_string.h:131:33: 注意:扩展自宏 'strcat' builtin___strcat_chk (dest, __VA_ARGS, __darwin_obsz (dest)) ^~~~~~~~ ~~~
-
在修复警告之前不要尝试运行此代码。您需要将字符数组的地址传递给
strcat。你不是。因此,声明一个数组并传递它。查看strcat的手册页,并修正你的论点。