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