C 语言 Switch 语句
建议 楼主 在 使用 系统 接口 时 ， 先 熟知 其 定义 及 返回 值 ； 如 scanf 的 函数 原型 为 ： int scanf ( const char * restrict format , . . . ) ; 它 的 返回 值 定义 如下 ： scanf 函数 返回 成功 读入 的 数据 项数 ， 读入 数据 时 遇到 了 “ 文件 结束 ” 则 返回 EOF ； 当 返回 0 时 ， 表示 实际 没有 成功 读 入 对应 数据 。 回到 楼主 的 测试 代码 ， 我 稍微 修改 了 ， 一下子 就 能 发现 问题 了 ： 注意 有 2 个 问题 ， 一 是 a 未 初始 化 ， 而 是 未 判断 scanf 的 返回 值 ； # include < stdio . h > void main ( void ) { int a ; / / 这里 定义 a 是 未 初始 化 的 ， 理论 上 它 的 值 是 随机 的 int ret ; printf ( " 1 = = = = = a = % d \ n " , a ) ; printf ( " 请 输入 : " ) ; ret = scanf ( " % d " , & a ) ; / / 注意 判断 scanf 的 返回 值 printf ( " 2 = = = = = a = % d ， scanf ret = % d \ n " , a , ret ) ; switch ( a ) { case 1 : printf ( " 输入 了 1 。 \r\n " ) ; break ; case 0 : printf ( " 输入 了 0 。 \ r \ n " ) ; break ; default : printf ( " 输入 错误 ! \ r \ n " ) ; break ; } } 修正 后 的 测试 代码 如下 ： void main ( void ) { int a = - 1 ; / / 这里 定义 a 时 初始 化为 - 1 int ret ; printf ( " 1 = = = = = a = % d \ n " , a ) ; printf ( " 请 输入 : " ) ; ret = scanf ( " % d " , & a ) ; / / 注意 判断 scanf 的 返回 值 printf ( " 2 = = = = = a = % d ， scanf ret = % d \ n " , a , ret ) ; if ( ret ! = 1 ) { / / 判断 scanf 的 返回 值 ， 当 ret 不 为 1 时 ( 读 入 1 个 整数 ) ， 表示 输入 错误 printf ( " 输入 错误 ! \ r \ n " ) ; return ; } switch ( a ) { case 1 : printf ( " 输入 了 1 。 \r\n " ) ; break ; case 0 : printf ( " 输入 了 0 。 \r\n " ) ; break ; default : printf ( " 输入 错误 ! \r\n " ) ; break ; } } 测试 记录 如下 ： root @ liluchang - ubuntu : / share /llc/test_scanf# ./test_scanf 1 ==== = a =-1 请 输入 : 777777777 2 = = = = = a = 777777777 ， scanf ret =1 输入 错误 ! root@liluchang-ubuntu : /share/llc/test_scanf# ./test_scanf 1 =====a=-1 请 输入 : 1 2 ===== a = 1 ， scanf ret =1 输入 了 1 。 root@liluchang-ubuntu : /share/llc/test_scanf# ./test_scanf 1 =====a=-1 请 输入 : 0 2 ===== a =0 ， scanf ret =1 输入 了 0 。 root@liluchang-ubuntu : /share/llc/test_scanf# ./test_scanf 1 =====a=-1 请 输入 : gggggg 2 =====a=-1 ， scanf ret =0 输入 错误 ! 测试 案例 输入 很 大 的 整数 、 字符串 、 数字 1 和 输 0 ， 均能 得到 预期 效果 。
