C K&;R风格的函数定义,为什么? #包括 法克托里亚尔长内酒店(北); int n; { 如果(n==0) 返回((长)1); 其他的 return(n*faktorijal(n-1));//递归调用 } main() { int i; 对于(i=0;i
您正在使用。在本例中C K&;R风格的函数定义,为什么? #包括 法克托里亚尔长内酒店(北); int n; { 如果(n==0) 返回((长)1); 其他的 return(n*faktorijal(n-1));//递归调用 } main() { int i; 对于(i=0;i,c,syntax,C,Syntax,您正在使用。在本例中 #include <stdio.h> long int faktorijal(n); int n; { if (n==0) return((long)1); else return(n*faktorijal(n-1)); // Recursive call } main() { int i; for (i=0;i<=5;i++) printf("%d! = %d\n",i,faktorijal(i)); getch(); } 函数签名后的尾随;错误。请删
#include <stdio.h>
long int faktorijal(n);
int n;
{
if (n==0)
return((long)1);
else
return(n*faktorijal(n-1)); // Recursive call
}
main()
{
int i;
for (i=0;i<=5;i++)
printf("%d! = %d\n",i,faktorijal(i));
getch();
}
函数签名后的尾随;
错误。请删除该项
此后,
返回一个faktorijal()
,但您将返回值作为参数提供给long int
,这又是错误的。您需要使用%d
%ld
不是标准的库函数,请改用getch()
getchar()
- 对于托管环境,
根据C标准(如果您认为是最新的),其一致性签名至少为main()
。隐式int规则已从标准中明确删除int main(void)
long int faktorijal(n);
int n;
未正确写入。请将其更改为:
long int faktorijal(n);
int n;
{
if (n==0)
return((long)1);
else
return(n*faktorijal(n-1)); // Recursive call
}
2.也会改变:
long int faktorijal(int n)
{
if (n == 0)
return((long)1);
else
return(n*faktorijal(n-1)); // Recursive call
}
致:
因为long int
的说明符是%ld
。说明符%d
是int
s
3.将main
的声明更改为:
printf("%d! = %ld\n",i,faktorijal(i));
致:
4.最后更改:
int main(){}
致:
并包括
stdlib.h
更改以下代码块:
getchar();
致:
定义函数时,函数体的头和开头大括号之间不应该有分号。编译器希望右括号正好位于开头大括号之前,这就是为什么它会产生一个错误,说明:
[错误]应为“{”标记之前的标识符或“(”
您还忘了指定参数的数据类型。请从函数参数头中删除n
,改为在那里添加int n
,如更正的代码所示
同样,您忘记正确定义main()
:
long int faktorijal(int n) // remove semicolon from here, this is function header. Also defined data type of argument
{
if (n==0)
return((long)1);
else
return(n*faktorijal(n-1)); // Recursive call
}
main()
函数的C++语法要求其返回数据类型为int。因此,将主函数更改为:
main()
另一件事:您的printf()
语句使用了不正确的格式说明符。更改:
int main()
致:
这是因为
faktorijal(i)
返回一个long int
,而long int的格式说明符是%ld
main()
-->int main(void)
请缩进你的代码!你真的应该买一个新键盘。你的空格键在代码片段中不起作用。K&R风格的函数声明器是过时的功能,永远不应该使用。如果你用一本书来学习:请买一本关于现代C(至少是C99,更好的标准C(11))的新的.@Olaf现在,这是一个明智的评论,严肃地说。:)@奥拉夫-是的,这是一本教科书。我之所以用这种方式缩进是因为我希望它100%像书上写的一样,但它仍然是错误的!谢谢。我想是函数原型。我对你的答案投了赞成票,因为它是完整的,切中要害的,而且引用性很好。但总的来说,回答这种打字错误的问题是浪费精力。They通常会很快被关闭,并在社区调节中被删除。@StoryTeller好的,当然……只是觉得可能会对某人有所帮助,因为遇到此类问题的机会也很小,所以借此机会澄清了几点。不过,以后将不再重复,谢谢。:)@StoryTeller当然可以。很长一段时间后回来了,很高兴看到社区像以前一样乐于助人……干杯!!@StoryTeller:问题是,up投票将阻止问题在结束后一段时间内自动删除。因此删除会让真实的人忙起来。一般来说,这样的问题不应该回答,最好是将精力投入到更好的问题中。(哦,对于原型声明器,语法错误也会存在)在第二种情况下,您丢失了类型…这是错误的。您正在跟踪…@NatashaDutta第二种情况是什么意思?谢谢,仅此一点就教会了我很多关于长整数的知识。谢谢。@alcatraz很高兴它有帮助。这不起作用。您尝试过编译它吗?@Mariev刚刚修复了它。
long int faktorijal(n);
int n;
{
if (n==0)
return((long)1);
else
return(n*faktorijal(n-1)); // Recursive call
}
long int faktorijal(int n) // remove semicolon from here, this is function header. Also defined data type of argument
{
if (n==0)
return((long)1);
else
return(n*faktorijal(n-1)); // Recursive call
}
main()
int main()
printf("%d! = %d\n",i,faktorijal(i));
printf("%d! = %ld\n",i,faktorijal(i));