首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 笔记本电脑 | 北大青鸟 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室C/C++频道
Google
首页 资讯动态 C语言 C++编程 C∕C++开发应用 VC++ C++Builder 专题 下载 博客 论坛
您现在的位置: 中国IT实验室 >> C∕C++频道 >> C++编程 >> 编程技巧 >> 正文

技巧:巧用数组减少if语句

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

 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;
}

【责编:ben】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·开发必备 漫谈Java加密保护
 ·嵌入式开发--ARM技术专题
 ·C/C++指针,认真了解,灵活运用
 ·.NET开发:C#实用基础教程
 ·软件测试工具QTP学习专题
 ·嵌入式开发单片机解决方案专题
 ·Java开发环境 Greenfoot 程序员手册
 ·C++对象布局及多态实现的探索
 ·常见排序算法的实现
 ·Web开发首选 Java Web开发详解
 今日更新
 社区讨论
 博客论点
 频道精选
 C/C++频道相关导航