鱼C论坛

 找回密码
 立即注册
查看: 725|回复: 4

[已解决]未初始化

[复制链接]
发表于 2020-7-1 11:13:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int max, min;
void r(int a[], int n);
void main()
{
        int i, a[10];
        printf("input 10 numbers:\n");
        for (i = 0; i < 10; i++)
                scanf("%d", &a[i]);
        printf("\n");
        r(a, 10);
        printf("max=%d min=%d\n", max, min);
}
void r(int a[], int n)
{
        int i;
        max = a[0];
        min = a[n - 1];
        for (i = 1; i < n; i++)
        {
                if (a[i] > max)
                        max = a[i];
                if (a[i] < min)
                        min = a[i];
        }
}


这个是正确的程序,我写的程序是


#include<stdio.h>
void main()
{
        void r(int a[], int n);
        int i, a[10],min,max;
        printf("input 10 numbers:\n");
        for (i = 0; i < 10; i++)
                scanf("%d", &a[i]);
        printf("\n");
        r(a, 10);
        printf("max=%d min=%d\n", max, min);
}
void r(int a[], int n)
{
        int i,max,min;
        max = a[0];
        min = a[n - 1];
        for (i = 1; i < n; i++)
        {
                if (a[i] > max)
                        max = a[i];
                if (a[i] < min)
                        min = a[i];
        }
}

这个程序的意思是输出最大值最小值,两个程序的区别是第一个程序里面max,min是全局变量,而第二个程序里是再定义max,min的,结果VS显示第二个程序的错误是main函数的max,min未初始化,还请大佬们指导为啥这要初始化?该怎么初始化?给max,min赋值吗?可是这里的max,min是在r函数里计算出来的呀
最佳答案
2020-7-1 11:47:16
在main中的定义的max和min的作用域只在定义行到main函数结尾,另外在r函数中定义的max和min的作用域是r函数内。在main中打印max,min是其初始值。

由于max和min并未初始化,所以其值是多少不确定,是内存中的垃圾值。

在使用的时候需要初始化下:
  1. #include<stdio.h>
  2. void main()
  3. {
  4.     void r(int a[], int n);
  5.     int i, a[10],min=0,max=0;
  6.     printf("input 10 numbers:\n");
  7.     for (i = 0; i < 10; i++)
  8.             scanf("%d",&a[i]);
  9.     printf("\n");
  10.     r(a, 10);
  11.     printf("max=%d min=%d\n", max, min);
  12. }
  13. void r(int a[], int n)
  14. {
  15.     int i,max=0,min=0;
  16.     max = a[0];
  17.     min = a[n - 1];
  18.     printf("r:max=%d min=%d\n", max, min);
  19.     for (i=1;i<n;i++)
  20.     {
  21.         if (a[i] > max)
  22.            max = a[i];
  23.         if (a[i] < min)
  24.             min = a[i];
  25.     }
  26.     printf("r:max=%d min=%d\n", max, min);
  27.    
  28. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-1 11:47:16 | 显示全部楼层    本楼为最佳答案   
在main中的定义的max和min的作用域只在定义行到main函数结尾,另外在r函数中定义的max和min的作用域是r函数内。在main中打印max,min是其初始值。

由于max和min并未初始化,所以其值是多少不确定,是内存中的垃圾值。

在使用的时候需要初始化下:
  1. #include<stdio.h>
  2. void main()
  3. {
  4.     void r(int a[], int n);
  5.     int i, a[10],min=0,max=0;
  6.     printf("input 10 numbers:\n");
  7.     for (i = 0; i < 10; i++)
  8.             scanf("%d",&a[i]);
  9.     printf("\n");
  10.     r(a, 10);
  11.     printf("max=%d min=%d\n", max, min);
  12. }
  13. void r(int a[], int n)
  14. {
  15.     int i,max=0,min=0;
  16.     max = a[0];
  17.     min = a[n - 1];
  18.     printf("r:max=%d min=%d\n", max, min);
  19.     for (i=1;i<n;i++)
  20.     {
  21.         if (a[i] > max)
  22.            max = a[i];
  23.         if (a[i] < min)
  24.             min = a[i];
  25.     }
  26.     printf("r:max=%d min=%d\n", max, min);
  27.    
  28. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-1 13:45:07 | 显示全部楼层
热气球 发表于 2020-7-1 11:47
在main中的定义的max和min的作用域只在定义行到main函数结尾,另外在r函数中定义的max和min的作用域是r函数 ...

好的,谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-1 14:20:48 | 显示全部楼层

搞个采纳嘿嘿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-2 08:28:28 | 显示全部楼层
你在打印max,min时,它们二位还没有赋值呢!如果是C++,不会报错,直接给你打印出来,如果是C,就会报错。它要求必须赋值后,你才能使用它参与计算或显示。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-22 08:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表