0d圈外女友 2023-01-28 00:39 采纳率: 100%
浏览 40
已结题

关于scanf两个字符串夹单个字符

刚接触c没多久,有点菜
一个十六进制运算的题目,一到判断ch是加还是减就出问题,我想可能是输入的原因,我就想试一下输入两个字符串一个字符然后原样输出,但是一直不行,不知道哪里出问题了

img


运行的时候,输入完两个字符串一个字符,回车还是不能出结果,一定要再输一个数

img


这是为什么呀,求解惑

  • 写回答

3条回答 默认 最新

  • a5156520 2023-01-28 11:10
    关注

    因为scanf函数读取字符串后,如果输入的第一个字符串后面有换行,则执行%s获取一个字符串到s1数组中后会把这个换行符丢弃在缓冲区,而被%c读取到字符变量ch中,然后%s获取字符串一定是要遇到第一个非空白字符才会读取成功,所以还需要字符才能执行完第二个%s;

    下面的修改,简单实现输入以空白字符分隔两个要参与运算的十六进制数字字符串,以及一个表明运算类的的字符,输出这三个输入对应的运算的十进制结果,修改如下:

    参考链接:





    #include <stdio.h>
    #include <ctype.h>  // isspace()
    #include <stdlib.h> // strtol()
    int main(void){
        
        int t;
        scanf("%d",&t);
        
        for(int i=0;i<t;i++){
            
            char ch,s1[31]={0},s2[31]={0};
        
            long a,b;
            int z,h;
            // https://blog.csdn.net/weixin_45767431/article/details/127714809 
            scanf("%s",s1); // 获取第一个十六进制字符串 
            // https://m.runoob.com/cprogramming/c-function-isspace.html
            while(isspace((ch=getchar()))!=0){ // 获取一个表示运算类型的字符 
                continue;
            }
            scanf("%s",s2); // 获取第二个十六进制字符串 
            
            // https://blog.csdn.net/weixin_44788542/article/details/118606443
            // https://www.runoob.com/cprogramming/c-function-strtol.html
            char * endp;
            a = strtol(s1,&endp,16); // 把第一个十六进制字符串转为对应的十进制 
            b = strtol(s2,&endp,16);  // 把第二个十六进制字符串转为对应的十进制 
            
            
            // 根据运算符来计算和打印其对应的十进制结果 
            if(ch=='+'){
                // https://blog.csdn.net/weixin_42979760/article/details/125590028
                printf("%s+%s=%ld\n",s1,s2,a+b);
            }else if(ch=='-'){
                printf("%s-%s=%ld\n",s1,s2,a-b);
            }else if(ch=='*'){
                printf("%s*%s=%ld\n",s1,s2,a*b);
            }else if(ch=='/'){
                printf("%s/%s=%.2f\n",s1,s2,a*1.0/b);
            }
    
            
            
        }
        
        return 0;
    }
     
    

    img

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

报告相同问题?

问题事件

  • 系统已结题 2月12日
  • 已采纳回答 2月4日
  • 创建了问题 1月28日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度