2 claysystem claysystem 于 2015.06.10 00:38 提问

c语言中函数中变量范围的问题?

ATT
测试环境:vs2013
win7
直接上代码

# include <stdio.h>
# include <stdlib.h>
void switch_a () //声明switch_a函数
void menu()//声明menu函数
int  main()
{
    int a, b; //参加运算的两个数字
    int c; //判断进行什么运算的变量

    printf("欢迎使用四则运算器\n");
    printf("请输入两个整型数字以空格隔开\n");
    scanf_s("%d %d", &a, &b); //输入 两个整数 分别到a,b变量中

    menu(); //调用menu函数
    scanf_s("%d", &c);//输入1,2,3,4其中一个数字到变量c中

    switch_a ();//调用switch_a函数

    system("pause");
    return 0;
}

void menu()
{ 
    printf("+ 选择 1\n"); //输出菜单上的选择内容
    printf("- 选择 2\n");
    printf("x 选择 3\n");
    printf("/ 选择 4\n");

    return 0;
}

void switch_a ()
{
    switch (c) //判断C的值
    {
    case 1:  //c == 1 就是加法运算
        printf("%d+%d=%d\n", a, b, a + b);
        break;
    case 2: //c == 2  就是减法运算
        printf("%d-%d=%d\n", a, b, a - b);
    case 3: // c == 3 就是乘法运算
        printf("%dX%d=%d\n", a, b, a*b);
    case 4: //c == 4 就是除法运算
        printf("%d/%d=%d\n", a, b, a / b);
    default: //c == other 输出以下信息
        printf("本程序只能输入1,2,3,4 您输入的数字应该不是它们之间的,请仔细检查!\n");
        break;
    }
    return 0;
}

问题:
为什么switch_a函数里的a,b,c 还可以用?a,b,c的声明都是在main函数里面进行的

8个回答

zhangweilst
zhangweilst   2015.06.11 19:52

谁说可以用的?哈哈。

claysystem
claysystem 好吧。我的错!
2 年多之前 回复
jk3h5jk435h
jk3h5jk435h   2015.06.10 00:48

因为你定义了全局变量 这样一次定义 处处调用 很方便

claysystem
claysystem 可是 我没有定义全局变量呀 a b c都是在main函数中定义的
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2015.06.10 02:14

你说的和真的一样,煞有介事的,我还以为VS2013有什么特异功能呢。
图片说明

caozhy
caozhy 回复牛战士: 你看到波浪线了么
2 年多之前 回复
claysystem
claysystem ?请说完整
2 年多之前 回复
a1193561652
a1193561652   Rxr 2015.06.10 13:47

你确定能用?我这边不行呀,而且这不科学。

claysystem
claysystem 运行不出来了...
2 年多之前 回复
VisualEleven
VisualEleven   Ds   Rxr 2015.06.10 13:58

你在Rebuild All一下看看,编译没问题???

claysystem
claysystem 编译失败了
2 年多之前 回复
claysystem
claysystem 编译失败了
2 年多之前 回复
jianjian1992
jianjian1992   2015.06.12 09:33

原来是题目本身有问题呀,我还以为突然有这种神奇的用法了呢

claysystem
claysystem 抱歉!抱歉!误导了!,我也不知道为什么,应该是有些细节上的问题我没有注意吧 O(∩_∩)O~
2 年多之前 回复
q3733353520
q3733353520   2015.06.15 15:09

在linux上使用gcc直接报错,我居然信了。。。。。。。。。。。。。。

claysystem
claysystem 抱歉!抱歉!误导了!,我也不知道为什么,应该是有些细节上的问题我没有注意吧 O(∩_∩)O~
2 年多之前 回复
chaobo_lu
chaobo_lu   2015.06.15 22:30

不行的,除非你把abc放到main外面声明成全局变量才可以。编译会报错的。

claysystem
claysystem 抱歉!抱歉!误导了!,我也不知道为什么,应该是有些细节上的问题我没有注意吧 O(∩_∩)O~
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片