C代码中句子存放不同两个位置,编译都没错,一个运行正确,一个运行出错

#include

//加法运算
int sum(int a, int b)
{
return a+b ;

}

//减法运算
int minus(int a, int b)
{
return a-b ;

}

void counting(int (*p)(int, int),int a, int b)
{
if(a <0 || b < 0)
{
printf("运算的数值<0\n");
return ;

}

    //此处调用指针指向的函数
    int result = p(a,b);
    printf("计算结果:%d\n",result);

}

int main()
{
int x,y;
char op;

//------------------------------问题----------------------------------

//在此处运行正确
printf("请输入运算符(+、-):");

scanf("%c",&op);

printf("请输入运算值x=");
scanf("%d",&x);
printf("请输入运算值y=");
scanf("%d",&y);

//------------------------------问题----------------------------------
/*为何放此运行会出错????????????
printf("请输入运算符(+、-):");

scanf("%c",&op);
*/

switch(op)
{
    case '+':
        //sum(x,y);
        counting(sum,x,y);
        //加法
        break;
    case '-':
        //minus(x,y);
        counting(minus,x,y);
        //减法
        break;

}

return 0;   

}

http://blog.csdn.net/21aspnet/article/details/174326
参考这个就明白了。。。