Daylightap 2023-03-18 15:54 采纳率: 57.1%
浏览 11
已结题

关于scanf与%c,%d的问题.请问为什么我前一段代码%d%d%c可以正常运行,而后一段代码会陷入死循环

关于scanf与%c,%d的问题
请问为什么我前一段代码%d %d %c可以正常运行,而后一段代码会陷入死循环?
正确代码


#include<stdio.h>
int main()
{
    int m,n;
    char ch;
    while(1)
    {
        scanf("%d %d %c",&m,&n,&ch);//注意点!!

        if(m==0 && n==0)
            break;
        else
            switch(ch)
            {
                case '+':
                   printf("%d\n",m+n);
                   break;
                case '-':
                    printf("%d\n",m-n);
                    break;
                case '*':
                    printf("%d\n",m*n);
                    break;
                case '/':
                    if(n!=0)
                        {printf("%d\n",m/n);
                        break;}
                    else
                        printf("Error\n");
                        break;
                case '%' :
                    printf("%d\n", m%n);
                    break;
                default:
                    printf("Error\n");
                    break;
            }
        }
}

错误代码:

#include<stdio.h>
int main()
{
    int m,n;
    char ch;
    while(1)
    {
        scanf("%d%d%c",&m,&n,&ch);//错误点!!!

        if(m==0 && n==0)
            break;
        else
            switch(ch)
            {
                case '+':
                   printf("%d\n",m+n);
                   break;
                case '-':
                    printf("%d\n",m-n);
                    break;
                case '*':
                    printf("%d\n",m*n);
                    break;
                case '/':
                    if(n!=0)
                        {printf("%d\n",m/n);
                        break;}
                    else
                        printf("Error\n");
                        break;
                case '%' :
                    printf("%d\n", m%n);
                    break;
                default:
                    printf("Error\n");
                    break;
            }
        }
}

  • 写回答

3条回答 默认 最新

  • 追cium 2023-03-18 16:00
    关注

    参考GPT和自己的思路:

    这个问题主要是因为%c会读取缓冲区中的回车符(\n),而%d不会读取,所以第二个scanf函数会读取到一个回车符,导致第三个scanf函数无法读取正确的字符,从而陷入死循环。

    正确的做法是在读取%c之前再加一个空格,即:scanf("%d%d %c",&m,&n,&ch); 这样可以消耗掉缓冲区中的回车符,从而避免这个问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月28日
  • 已采纳回答 3月20日
  • 创建了问题 3月18日

悬赏问题

  • ¥15 pyqt5tools安装失败
  • ¥15 mmdetection
  • ¥15 nginx代理报502的错误
  • ¥100 当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧
  • ¥15 图示五个参数的模型校正是用什么方法做出来的。如何建立其他模型
  • ¥100 描述一下元器件的基本功能,pcba板的基本原理
  • ¥15 STM32无法向设备写入固件
  • ¥15 使用ESP8266连接阿里云出现问题
  • ¥15 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果