anily 发表于 2021-9-28 22:02:14

新手求助

#include<stdio.h>
int calculate(int A , int B );
intRe();
charBool;
int main()
{
   
    Bool='Y';
        if(Bool=='Y')
        {
       Re();

        }
        else
        {
                return 0;
        }
       
}
int Re()
{
          Bool='N' ;
                int a,b ;
                printf("请输入两个数 进行相加:\n");
                scanf("%d %d",&a,&b) ;
            printf("计算结果为:%d \n",calculate(a,b)) ;
                printf("想继续计算请输入Y 退出请输入N") ;
                scanf("%c",Bool);
               
                if(Bool=='Y')
                {
                        Re();
                }
               
}
int calculate(int A , int B )
{
        int result ;
    result= A +B;
        return result;
}
为什么跳到我想再调用函数Re的时候就结束程序了

慕道子 发表于 2021-9-28 22:16:00

scanf("%c",Bool); ->scanf("%c",&Bool); 取地址符呢,哈哈,典中典了

anily 发表于 2021-9-28 22:20:46

慕道子 发表于 2021-9-28 22:16
scanf("%c",Bool); ->scanf("%c",&Bool); 取地址符呢,哈哈,典中典了

好像是这样的但他还是不触发scanf以及后面那个if直接就结束了

慕道子 发表于 2021-9-30 01:51:21

哈哈,抱歉,还有一个典中典。
由于Bool是字符型,所以scanf("%c",&Bool)直接接收缓冲区里的回车。可以加一个getchar()吸收回车。
具体的可以上去博客搜索一下详细原因。

#include<stdio.h>
int calculate(int A , int B );
intRe();
charBool;
int main()
{
   
    Bool='Y';
      if(Bool=='Y')
      {
         Re();

      }
      else
      {
                return 0;
      }
      
}
int Re()
{
            Bool='N' ;
                int a,b ;
                printf("请输入两个数 进行相加:\n");
                scanf("%d %d",&a,&b) ;
            printf("计算结果为:%d \n",calculate(a,b)) ;
                printf("想继续计算请输入Y 退出请输入N\n") ;
                getchar();
                scanf("%c",&Bool);
               
                if(Bool=='Y')
                {
                        Re();
                }
               
}
int calculate(int A , int B )
{
      int result ;
    result= A +B;
      return result;
}

anily 发表于 2021-10-3 00:37:16

慕道子 发表于 2021-9-30 01:51
哈哈,抱歉,还有一个典中典。
由于Bool是字符型,所以scanf("%c",&Bool)直接接收缓冲区里的回车。可以加 ...

典中典中典
页: [1]
查看完整版本: 新手求助