zoukankan      html  css  js  c++  java
  • 字符串处理scanf("%d%*c",&n);

    "*"表示该输入项读入后不赋予任何变量,即跳过该输入值。这在减小内存开支上面还是有一点用处的,不需要的字符直接跳过,免得申请没用的变量空间 
    你的例子中的%*c的作用是读入' ',即回车符,否则后面读入的将是' '。 

    其实还有更强大的一些字符串读入技巧,如下: 

    对于输入字符串还有一些比较有用的控制, 
    经常需要读入一行字符串,而这串字符里面可能有空格、制表符等空白字符, 
    如果直接用%s是不可以的,于是有些人就想到用gets(),当然这也是一种选择, 
    但是懂C的人基本上都知道gets()是一个很危险的函数,而且很难控制, 
    特别是与scanf()交替使用时前者的劣势更是一览无余,所以gets()一般是不推荐用的, 

    其实用%[^ ]就可以很好的解决这个问题了, 

    ^表示"非",即读入其后面的字符就结束读入。 
    这样想读入一行字符串直接用scanf("%[^ ]%*c",str);就可以了, 
    %*c的作用也是读入 ,否则后面读入的将一直是 。 

    所有对%s起作用的控制都可以用%[], 
    比如%[0-9]表示只读入'0'到'9'之间的字符,%[a-zA-Z]表示只读入字母, 
    '-'是范围连接符, 
    当然也可以直接列出你需要读入的字符,上面读字母之所以用范围连接符是因为要输入52个字符太麻烦了, 
    如果你只需要读"abc"里面的字符就可以用%[abc] (或者%[cab]、%[acb]、%[a-c]、%[c-a].....), 
    如果想读入某个范围之外的字符串就在前面加一个'^',如:%[^a-z]就表示读入小写字母之外的字符 
    上面这些用法其实可以有很多推广用法的,比如说你要处理下面的字符串 
    23 44r f30 
    88888,3245;34:123.9999 

    /*当输入中有9999时退出,否则一直输入*/ 
    #include <stdio.h>  
    void main(void) 

    int n; 

    while((scanf("%*[^0-9]"),1) && scanf("%d", &n)&&n!=9999)printf("%d ", n); 

    getch(); 

  • 相关阅读:
    TinyOS在ubuntu 14.04下安装教程
    C++ STL标准入门
    C++ 模板
    多态
    C++继承
    C++类型转换 -- 由其他类型转换到自定义类型
    运算符重载
    友元
    typedef用法
    c++细节--section1
  • 原文地址:https://www.cnblogs.com/houst388/p/6385787.html
Copyright © 2011-2022 走看看