回首页 回首页 ◎ 设为首页  
◎ 收藏本站  
◎ 给我留言  
  
  首 页  C/C++教程  C++之父的FAQ  C/C++动向  C/C++源代码  C/C++误区  Unix/Linux  下载中心  乱七八糟  蚂蚁的Blog  
  当前位置:首 页 >> C/C++教程 >> C/C++ 技巧 >> [C/C++技巧]巧用数组减少if语句
最 近 更 新
[转][C++] 巧用 mutable推荐
[C++] 巧用模板定义谓词
巧用异或交换整型变量的值
宏的一个妙用
[C/C++ 技巧] 提高程序..推荐
[C/C++ 技巧] 产生随机..
[C/C++技巧]巧用数组减..推荐
巧用移位运算避免乘法运算
无条件循环
最 新 推 荐
[转][C++] 巧用 mutable推荐
[C/C++ 技巧] 提高程序..推荐
[C/C++技巧]巧用数组减..推荐
热 门 排 行
[C/C++ 技巧] 产生随机..
[C/C++ 技巧] 提高程序..推荐
巧用移位运算避免乘法运算
[C/C++技巧]巧用数组减..推荐
宏的一个妙用
[转][C++] 巧用 mutable推荐
无条件循环
巧用异或交换整型变量的值
[C++] 巧用模板定义谓词
站 内 搜 索

Web stdcpp.cn
关键词

搜索方式

搜索范围

精确匹配
广 告

[C/C++技巧]巧用数组减少if语句


来源:蚂蚁的 C/C++ 标准编程 作者:antigloss 等级:精品
发布于2005-10-24 12:13 被读2767次 【字体:

假设我们要写一个判断用户输入整数奇偶性的程序,可以用以下代码实现:

long num;

cin >> num;
if ( num % 2L ) {
    cout << "Odd!\n";
} else {
    cout << "Even!\n";
}

但是这个 if 判断是没必要的,我们可以利用数组来避免:

const char *msg[] = { "Even", "Odd" };
long num;

cin >> num;
cout << msg[num & 1L] << '\n';  // can also be `num % 2'

这种方法不仅对这个程序有效,不少别的应用也可以使用这个方法来减少 if 语句。这个方法也可以用于 C 程序。以下是奇偶判断程序完整代码:

/*
 * FileName:          odd_or_even.cpp
 * Author:            Antigloss at http://stdcpp.cn
 * LastModifiedDate:  2005-7-22 22:30
 * Purpose:           Tell if a given number is odd or even
 */

#include <cstdlib>    // for EXIT_SUCCESS
#include <iostream>
#include <limits>     // for numeric_limits

// flush the input buffer
inline void flush_stdin()
{
    std::cin.clear(); // clear error state of the stream
    // clear data left at the input buffer
    std::cin.ignore( std::numeric_limits< std::streamsize >::max(), '\n' );
} // end of flush_stdin

int main()
{
    long num;
    const char *msg[] = { "Even", "Odd" };

    for (;;) {
        std::cout << "Please input an integer(q to end): ";

        if ( std::cin >> num ) {
            std::cout << msg[num & 1L] << '\n'; // we can also use `num % 2L'
        } else {
            std::cin.clear(); // clear error state before reading from the input stream
            if ( std::cin.get() == 'q' ) {
                flush_stdin();
                break;
            }
            std::cerr << "You should input an INTEGER!\n";   
        }
        flush_stdin();
    }

    std::cout << "Thanks for using our product!\nPress ENTER to quit...";
    std::cin.get();
    return EXIT_SUCCESS;
}

本文版权归 蚂蚁的 C/C++ 标准编程 以及 作者 antigloss 共同所有,转载请注明原作者和出处。谢谢。



相关专题:暂无相关专题

上一篇:巧用移位运算避免乘法运算
下一篇:[C/C++ 技巧] 产生随机数的方法

共有评论 4 条 网友评分 5分 查看全部评论

游客:Dic4000
评分:0
if ( std::cin >> num ) 里面的std::cin>>num返回的是istream类型,它也能看成bool类型吗?
游客:antigloss
评分:0
istream 会自动转化为 bool
游客:菜鸟爱CPP
评分:0
istream 会自动转化为 bool

积累一下
游客:哇
评分:5
今天获益匪浅,算法太好了,这样的想法真是精妙呢

查看全部评论

【发表评论】 评分:1分 2分 3分 4分 5分


验证码:

Powered By Www.Xydw.COM Ver1.14 管理
Copyright © 2005-2006 蚂蚁的 C/C++ 标准编程 All Right Reserved. XCMS
粤ICP备06014124号   站长:Antigloss