全局和局部变量

global and local variable

#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 作为全局变量时它工作...如果我想将它们作为局部变量我应该做些什么更改...使用函数

scanf("%s",&c); 导致 未定义的行为 。您至少存储了两个字符 ['+', '[=11=]'],而您只为其中一个字符分配了 space。

您可以考虑 scanf(" %c", &c);。请注意,我有意在格式字符串中添加了一个 space 来吃掉用户可能包含的任何白色 space。

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

显然是错误的,即使 c 是一个全局变量。

您的 scanf 将从键盘获取输入并将您键入的字符串存储在作为第二个参数给出的地址(在您的例子中是 c 的地址)。但是c只有一个字符space,而你用scan输入的字符串至少需要2个字符(你输入的那个和第一个以零结尾)。

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

  • 似乎可以工作
  • 每次 运行 都会崩溃
  • 似乎与您键入的特定字符串一起工作,但与另一个字符串一起工作时崩溃
  • 或任何其他奇怪的行为

你需要这个:

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

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