我是 C 编程新手(尽管我有 Java 经验)。阅读了一些教程后,我决定开始解决编码挑战编码字节 https://www.coderbyte.com.
我尝试的第一个挑战是this one https://www.coderbyte.com/editor/guest:First%20Factorial:C:
挑战
有功能第一个阶乘(数字)采取num传递参数并返回其阶乘。例如:如果num= 4,那么你的程序应该返回(4*3*2*1)= 24。对于测试用例,范围将在 1 到 18 之间,并且输入始终为整数。
示例测试用例
Input: 4
输出:24
Input: 8
输出:40320
我的解决方案:
#include <stdio.h>
void FirstFactorial(int num[]) {
int i = num -1;
for(i ; i > 0; i--) {
num = num * i;
printf("%d",i);
}
printf("\t %d", num);
}
int main(void) {
// disable stdout buffering
setvbuf(stdout, NULL, _IONBF, 0);
// keep this function call here
FirstFactorial(gets(stdin));
return 0;
}
输入参数的值:8
错误信息:
main.c: In function 'FirstFactorial':
main.c:5:11: warning: initialization makes integer from pointer without a cast [-Wint-conversion]
int i = num -1;
^~~
main.c:8:15: error: invalid operands to binary * (have 'int *' and 'int')
num = num * i;
^
main.c: In function 'main':
main.c:23:18: warning: passing argument 1 of 'FirstFactorial' makes pointer from integer without a cast [-Wint-conversion]
FirstFactorial(8);
^
main.c:3:6: note: expected 'int *' but argument is of type 'int'
void FirstFactorial(int num[]) {
^~~~~~~~~~~~~~
exit status 1
所以似乎有一些问题,我有几个问题:
-
我从没听说过gets(stdin)
。我抬头gets() https://www.gnu.org/software/libc/manual/html_node/Line-Input.html#index-gets,并且 glibc 文档说该函数返回一个char*
。我怎样才能将它传递给一个需要int
?
-
看起来像
int i = num -1;
正在初始化i
为 4 而不是 7。为什么?
-
for循环似乎是递减的i
正确(i
= 7, 6, 5, 4, 3, 2, 1)。但这个声明:
num = num * i;
正在产生错误。这有什么问题吗?它看起来就像一个普通的乘法。
为了未来的访客:
这是对 Coderbytes 为了“方便”而使用的语言的可怕滥用。gets(stdin)
首先就不应该起作用:类型不起作用。
实际发生的事情是Coderbytes 正在盲目地寻找并替换第一个实例gets(stdin)
使用您作为输入提供的文字字符串,然后将代码发送给编译器。这甚至不是一个预处理器宏,它是对源代码的盲目替换。
因此,虽然您在现实中永远不应该这样做,但在 Coderbytes 上,这是一种不可避免的罪恶:这似乎是唯一受支持的将输入输入到程序中的方式。
Source https://stackoverflow.com/a/55269670/3233017
另外,如果您想要一些娱乐,请尝试清除其他所有内容并将其放入 Coderbytes 中:
int main(){
printf("%s", "This is a literal string containing gets(stdin) along with other words");
}
您会发现即使在字符串文字内部也会发生替换!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)