为什么这个代码会显示这些错误,它显示我使用了未初始化的局部变量,怎么将它初始化呀?还有说的那个参见“scanf”的声明是啥意思呀
你这里有程序有问题的,n不是外部输入吗?怎么还在递归函数内部输入啊~
程序应该做如下修改,看能否满足你的需要~
#include <stdio.h>
int fibonacci(int n)
{
//printf("please input a integer n:");
//scanf("%d", &n);
if(n==1 || n==2)
return 1;
else
return fibonacci(n-1)+fibonacci(n-2);
}
int main()
{
int n;
printf("please input a integer n:");
scanf("%d", &n);
printf("the item is %d\n", fibonacci(n));
}
你应该在主函数里scanf,不明白怎么想的在函数里scanf,你这样的话,难道每次递归都要再次输入一个数字?
既然报错能截图,发个代码就那么难吗,手写代码是几个意思
如下代码演示了使用scanf进行数据输入时的正确用法。中间加入了一些打印信息,用于辅助理解输入缓冲区中的情况。
#include <stdio.h>
int main() {
int a=10;
int ret = 0;
char c = 'a';
printf("第一次输入:");
ret=scanf("%x", &a);
while (ret!=1) {
while ((c=getchar()) != '\n')
{
printf("缓冲区中的数据:%c\n", c);
}
printf("再次输入:");
ret=scanf("%x", &a);
}
printf("%#x\n", a);
system("pause");
return 0;
}
运行上面的代码,再次输入"mmm“等非十六进制字符时的现象如下:
可以看到,当输入“mmm”之后,scanf的返回值并非期望的1(实际是0,表示scanf操作失败,因为输入的数据不是十六进制数)。然后程序往下一个循环中,这个循环中调用了getchar(),为了展示当前输入缓冲区中的数据,使用一个字符获取了getchar()获取到的数据。可以看到,当scanf获取失败之后,其实输入缓冲区中的数据还是没有被取走,还是“mmm”。所以,这就解释了为啥错误示例中的scanf会一直执行失败,就好像直接跳过一样,原因就是输入缓冲区中的数据一直保持的“mmm”,导致scanf也一直返回错误。
int num = 0; //声明并初始化变量num
或者在使用该变量前给其进行赋值,例如:
int num; //先声明变量num
scanf("%d", &num); //在使用前给变量num赋值
#include <stdio.h> //声明stdio.h头文件,其中包含scanf函数的声明
这样就可以在代码中使用scanf函数了。同时,在使用scanf函数时,需要注意参数的类型和个数与格式控制符的匹配。例如:
int num;
scanf("%d", &num); //scanf函数使用时,需要传入一个整型变量的地址,并使用%d格式控制符接收输入