为什么这个代码会显示这些错误

为什么这个代码会显示这些错误,它显示我使用了未初始化的局部变量,怎么将它初始化呀?还有说的那个参见“scanf”的声明是啥意思呀

img

img

你这里有程序有问题的,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,你这样的话,难道每次递归都要再次输入一个数字?

既然报错能截图,发个代码就那么难吗,手写代码是几个意思

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7811482
  • 这篇博客你也可以参考下:从键盘上输入两个数,编写程序交换两数,输出交换后的两个 数。(顺序结构及输入函数scanf的用法、两数交换的思想)
  • 除此之外, 这篇博客: 细节:使用scanf函数输入数据时的注意事项,若使用不当会导致程序进入死循环。中的 3.正确示例 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 如下代码演示了使用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也一直返回错误。

  • 您还可以看一下 传智老师的2016年c语言教程第3天课程中的 07 使用scanf函数一次接收输入多个数据小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:
    1. 对于未初始化的局部变量错误提示,可以先声明该变量并给一个默认值,例如:
    int num = 0; //声明并初始化变量num
    

    或者在使用该变量前给其进行赋值,例如:

    int num; //先声明变量num
    scanf("%d", &num); //在使用前给变量num赋值
    
    1. 关于scanf函数的声明,可以在代码文件开头加入头文件,这将声明scanf函数,例如:
    #include <stdio.h> //声明stdio.h头文件,其中包含scanf函数的声明
    

    这样就可以在代码中使用scanf函数了。同时,在使用scanf函数时,需要注意参数的类型和个数与格式控制符的匹配。例如:

    int num;
    scanf("%d", &num); //scanf函数使用时,需要传入一个整型变量的地址,并使用%d格式控制符接收输入