zoukankan      html  css  js  c++  java
  • scanf 输入加逗号(或者不加逗号)出现的异常及解决方案

    我们在写 C 语言代码通常 scanf 的格式控制部分都有两种习惯,加逗号与不加逗号,而这两种情况都会因为我们的不同输入习惯产生一定的问题,这里给出另一种方法。

    1、不加逗号

     1 #include<stdio.h>
     2 
     3 #define SWAP(a, b) a=a^b;b=a^b;a=a^b;
     4 
     5 void main()
     6 {
     7         int num1, num2;
     8         printf("Input num1 and num2:");
     9         scanf("%d%d", &num1, &num2);
    10         SWAP(num1, num2);
    11         printf("After the exchange:%d,%d
    ",num1,num2);
    12 }

    下面这是3种不同的输入方式以及相应的输出结果

    1.1用空格隔开两个变量

    1.2用回车换行隔开

    1.3用逗号隔开

    我们可以发现前两种都没什么问题,而第三种就不是我们想要的结果了。

    2、加逗号

     1 #include<stdio.h>
     2 
     3 #define SWAP(a, b) a=a^b;b=a^b;a=a^b;
     4 
     5 void main()
     6 {
     7         int num1, num2;
     8         printf("Input num1 and num2:");
     9         scanf("%d,%d", &num1, &num2);
    10         SWAP(num1, num2);
    11         printf("After the exchange:%d,%d
    ",num1,num2);
    12 }

     2.1用空格隔开

     

    2.2用回车换行隔开

    2.3用逗号隔开

    巧的是,这次刚好和第一种相反,前两个都和预期不一样,第三个是我们要的。

    3、解决方案

    #include<stdio.h>
    
    #define SWAP(a, b) a=a^b;b=a^b;a=a^b;
    
    void main()
    {
            int num1, num2;
            printf("Input num1 and num2:");
            scanf("%d%*c%d", &num1, &num2);
            SWAP(num1, num2);
            printf("After the exchange:%d,%d
    ",num1,num2);
    }

    接下来看看这次的结果。

    3.1空格隔开

    3.2回车换行隔开

    3.3逗号隔开

    我们惊喜地发现这次 3 种输入方式都是我们想要的结果了。

    4、说明

    scanf 要求输入的格式必须与自己设定的保持一致,1 和 2 的代码之所以会报错就是因为输入和设定的不一样。而在 3 的代码中,%*c 充当了一个提取我们分割变量的一个容器,可以把我们输入的各种分割字符都提取出去,所以 3 种输入方式都正常了。

    ps:这种方法不适合两个变量都是字符串

    作者:耑新新,发布于  博客园

    转载请注明出处,欢迎邮件交流:zhuanxinxin@aliyun.com

  • 相关阅读:
    react路由组件&&非路由组件
    react函数式组件(非路由组件)实现路由跳转
    react使用antd组件递归实现左侧菜单导航树
    【LeetCode】65. Valid Number
    【LeetCode】66. Plus One (2 solutions)
    【LeetCode】68. Text Justification
    【LeetCode】69. Sqrt(x) (2 solutions)
    【LeetCode】72. Edit Distance
    【LeetCode】73. Set Matrix Zeroes (2 solutions)
    【LeetCode】76. Minimum Window Substring
  • 原文地址:https://www.cnblogs.com/Arthurian/p/8972143.html
Copyright © 2011-2022 走看看