李子106 2022-10-22 18:45 采纳率: 83.3%
浏览 26
已结题

计算器验证姓名出问题

问题遇到的现象和发生背景

简易计算器器和验证姓名拉一起出问题,运算器单独拉出来可以运行,但是放一起每次第一遍运算的运算符会被吞掉

用代码块功能插入代码,请勿粘贴截图
#include <stdio.h>
#include <string.h>
int main()
{
    int count=0;
    char x[10];
    char name[10]="xiaoming";
    while(1)
    {
    printf("请输入您的姓名:");
    scanf("%s",&x);
    if (strcmp(x,name)==0){
        puts("HELLO");
        break;
    }
    else{
        count++;
        puts("ERROR");
        if (count==3){
            printf("错误太多,程序结束!");
            return 0; 
        }
    }
    }
    float m,n;
    char op;
    while(1)
    {
        printf("请输入运算符号(+,-,*,/):");
        scanf("%c",&op);
        printf("请输入第一个数字\n");
        scanf("%f",&m);
        printf("请输入第二个数字:\n");
        scanf("%f",&n);
        if(op=='+')
        printf("%lf + %lf = %lf\n", m, n, m + n);
        else if(op=='-')
        printf("%lf - %lf = %lf\n", m, n, m - n);
        else if(op=='*')
        printf("%lf * %lf = %lf\n", m, n, m* n);
        else if(op=='/')
    {
        if(n==0)
        printf("该值不存在!\n");
        else
        printf("%lf / %lf = %lf\n", m, n, m/n);
    }
        else{
            printf("抱歉,此计算器还没有那么高级!\n"); 
        }
    getchar();
}
}

运行结果及报错内容

img

  • 写回答

1条回答 默认 最新

  • a5156520 2022-10-22 19:30
    关注

    应该是因为scanf读取字符时把前面的scanf丢弃的换行符读入进来而导致出错了,在读取字符前加个循环读走前面scanf()函数获取输入后丢弃的换行符等字符即可。修改如下:

    参考链接:
    ASCII码对照表-完整ASCII码表-我就查查询

    #include <stdio.h>
    #include <string.h>
    int main()
    {
        int count=0;
        char x[10];
        char name[10]="xiaoming";
        while(1)
        {
        printf("请输入您的姓名:");
        scanf("%s",x);
        while(getchar()!='\n')  //读走前面scanf()函数丢弃在缓冲区的换行符,以便下面的scanf()函数顺利读取字符 
            continue;
        if (strcmp(x,name)==0){
            puts("HELLO");
            break;
        }
        else{
            count++;
            puts("ERROR");
            if (count==3){
                printf("错误太多,程序结束!");
                return 0; 
            }
        }
        }
        float m,n;
        char op;
        while(1)
        {
            
            printf("请输入运算符号(+,-,*,/):");
            scanf("%c",&op);
            //printf("op=%c,op=%d\n",op,op) ;
            //http://ascii.wjccx.com/
            
            
            printf("请输入第一个数字\n");
            scanf("%f",&m);
           
           // printf("m=%f\n",m) ;
            
            printf("请输入第二个数字:\n");
            scanf("%f",&n);
           // printf("n=%f\n",n) ;
            
            if(op=='+')
            printf("%lf + %lf = %lf\n", m, n, m + n);
            else if(op=='-')
            printf("%lf - %lf = %lf\n", m, n, m - n);
            else if(op=='*')
            printf("%lf * %lf = %lf\n", m, n, m* n);
            else if(op=='/')
        {
            if(n==0)
            printf("该值不存在!\n");
            else
            printf("%lf / %lf = %lf\n", m, n, m/n);
        }
            else{
                printf("抱歉,此计算器还没有那么高级!\n"); 
            }
        getchar();
    }
    }
     
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 10月30日
  • 已采纳回答 10月22日
  • 创建了问题 10月22日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。