全局和局部变量

时间:2016-02-28 06:59:49

标签: c global local

#include<>
int calc(int,int,char);
void main()
{
    int a,b;
    char c;
    printf("enter 2 nos");
    scanf("%d%d",&a,&b);
    printf("enter op");
    scanf("%s",&c);
    printf("the ans is %d\n",calc(a,b,c));
}
int calc(int a,int b,char c)
{
    int ans;
    switch(c)
    {
        case'+':ans=a+b;break;
        case'-':ans=a-b;break;
    }
    return ans;
}

为什么这个程序将输出作为b ...当我给a,b和c作为全局变量时它起作用...如果我想将它们作为局部变量我应该做什么改变...使用函数

2 个答案:

答案 0 :(得分:2)

scanf("%s",&c);会导致未定义的行为。您至少存储了两个字符['+', '\0'],并且您只为一个字符分配了空格。

您可以考虑scanf(" %c", &c);。请注意,我故意在格式字符串中添加一个空格以占用用户可能包含的任何空格。

答案 1 :(得分:0)

char c;
...
scanf("%s",&c);

即使c是全局变量,也是完全错误的。

您的scanf将从键盘获取输入并将您键入的字符串存储在作为第二个参数给出的地址(在您的情况下为c的地址)。但c只有一个字符的空格,输入scan的字符串至少需要2个字符(您输入的字符和终止为零的字符)。

在您的情况下,您会得到未定义的行为,这意味着您的程序可能

  • 似乎正常工作
  • 每次运行时都会崩溃
  • 似乎与您键入的某个字符串一起使用,并与另一个
  • 崩溃
  • 或任何其他奇怪的行为

你需要这个:

char c[10];
...
scanf("%9s",c);
...
printf("the ans is %d\n",calc(a,b,c[0]));

允许您输入长度为9的字符串(9个字符+终止0 = 10)。