zoukankan      html  css  js  c++  java
  • scanf

    scanf吃回车

    1. 1)用getchar()清除 
    2. (2)用"%1s"来限制 
    3. (3)用格式串中空格或"%*c"来"吃掉" 
    4. (4)用函数fflush(stdin)清除全部剩余内容 
    5. */  

    每次调用完scanf后,记得调用一个getchar()函数
    如下代码:
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>

    int main(int argc, char** argv) {
        long i = 0;
        int k = 0;
        char ch;
        k = scanf("%ld",&i);
        printf("%ld ",i);
        ch = getchar();
        printf("%c ",ch);
        return (EXIT_SUCCESS);
    }
         用户其实是想读入一个整型数据后,再读入一个字符型数据,并在屏幕上打印,可是程序运行后可以发现,程序在要求用户输入一个整型的数据后,并没有继续要求用户输入一个字符型的数据,而是直接退出程序。出现这种情况是因为scanf只会获得缓冲区中对自己有用的数据,至于回车换行,将不会将其从缓冲区中读出,这样就会影响下一个数据的输入,如果下一条读入的数据是非字符类型的倒无所谓,可是如果读入的是一个字符类型的数据,那反问题就来了,由于上一次读入,输出缓冲中余留有一个回车' ‘符号,这时调用 getchar会直接返回,且返回的值为' ‘,这样用户就不能正常得到数据,所以一定要记得在scanf后面加一条getchar语句来清空缓冲的回车符号 。以上代码改为如下形式,就能达到要求了:
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>

    int main(int argc, char** argv) {
        long i = 0;
        int k = 0;
        char ch;
        k = scanf("%ld",&i);
        getchar();
        printf("%ld ",i);
        ch = getchar();
        printf("%c ",ch);
        return (EXIT_SUCCESS);
    }

    scanf

  • 相关阅读:
    *VC编程规范
    C++的va_start() va_end()函数应用(转)
    * C++类的分解,抽象类与纯虚函数的需要性
    *C++中的回调
    *C++中使用接口
    C++模版使用
    *获取mac地址的方法
    *数字——字符之间的转换(转)
    eclipse雕虫小技一:eclipse打开文件目录
    Hibernate升级后注解方式的对象关系映射
  • 原文地址:https://www.cnblogs.com/wshyj/p/6001354.html
Copyright © 2011-2022 走看看