#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();
}
给我一个错误&#34; [错误]预期标识符或&#39;(&#39; {&#39;令牌&#34;。
我认为它与主要功能有关,但我不确定,所以我在这里问。
faktorijal表示阶乘
编辑:只是为了展示错误的书籍。它是一本较旧的书,但我们也被教导使用getch()代替getchar或返回0。
谢谢大家,这帮了很多忙。
答案 0 :(得分:7)
您正在使用K&R style。在这种情况下
long int faktorijal(n);
int n;
函数签名错误后的尾随;
。删除它。
之后,
faktorijal()
会返回long int
,但您将返回值作为%d
的参数提供,这又是错误的。您需要使用%ld
。getch()
不是标准库函数,而是使用getchar()
。main()
符合签名(最新,如果您认为),至少为int main(void)
。隐式int规则已从标准中明确删除。答案 1 :(得分:0)
1。功能:
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)
{
if (n == 0)
return((long)1);
else
return(n*faktorijal(n-1)); // Recursive call
}
2. 也改变:
printf("%d! = %d\n",i,faktorijal(i));
到:
printf("%d! = %ld\n",i,faktorijal(i));
作为long int
的说明符是%ld
。说明符%d
适用于int
s。
3. 更改main
的声明:
main(){}
到:
int main(){}
4. 最后改变:
getch();
到:
getchar();
并加入stdlib.h
。
答案 2 :(得分:0)
更改以下代码块:
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
}
定义函数时,标题和函数体的左大括号之间不应有分号。编译器期望右括号在此前面的大括号前面,这就是它产生错误的原因:
[错误]预期标识符或'(''''''''''''''''''''
您也忘了指定参数的数据类型。从函数参数标题中删除n
,而不是在那里添加int n
,如更正后的代码所示。
,您忘了正确定义main()
:
main()
main()
函数的C ++语法要求它具有返回数据类型int。因此,将主要功能更改为:
int main()
另一件事:您的printf()
语句使用了不正确的格式说明符。变化:
printf("%d! = %d\n",i,faktorijal(i));
要:
printf("%d! = %ld\n",i,faktorijal(i));
这是因为faktorijal(i)
返回long int
,而long int的格式说明符为%ld