C 指针原理揭秘:基于底层实现机制 (9):C 语言快速入门 2.2.2

阅读数:5 2019 年 12 月 11 日 20:21

C指针原理揭秘:基于底层实现机制(9):C语言快速入门 2.2.2

(限制输入数字的范围)

内容简介
全书分为准备篇、基础篇、揭秘篇、实战篇。本书力求从底层实现机制进行解析,同时配合 C/C++ 编程技巧以及某些指针运用技巧,讲解如何提高程序效能,如何避免滥用指针。
准备篇中介绍 C 指针概述、UBUNTU 及开发环境配置、AT&T 汇编简介、编译原理基础;基础篇将对 AT&T 汇编以及 C 指针基础进行介绍;揭秘篇讲述高级 C 指针的实现机制以及 C++ 指针实现机制,同时讲解编程技巧和 C/C++ 指针高级应用;实战篇讲解解释语言指针、TCC 编译实践、垃圾回收等高级 C 指针应用话题。

游戏要求输入 1-500 以内的整数,但在运行程序 2-1 时,输入 900、-10 等不符合要求的数字,仍然能够通过。比如,在下面所示的运行结果中,900 和 -10 均通过了输入程序的测试:

复制代码
$ ./myguess
你好,请输入一个数字:900
你输入的数字是:900
你好,请输入一个数字:-10
你输入的数字是:-10

本步骤的目标就是让程序拒绝接受不合法的数字,并提示玩家重新输入,因此,需要修改程序,限制玩家输入数字的范围,修改的代码如程序 2-2 所示:

程序 2-2 限制玩家输入数字的范围
复制代码
#include <stdio.h>
int main(){
int mynum;
printf(" 你好,请输入一个数字:");
scanf("%d",&mynum);
if (mynum>500 ||mynum<1){
printf(" 数字仅限于 1-500 之间,请重新运行本程序!\n");
}
else{
printf("\n 你输入的数字是:%d\n",mynum);
}
}

编译并运行程序 2-2,从下述运行效果来看,错误的数字并没有被接受,但要想重新输入,必须再运行一次程序:

复制代码
$ gcc -o myguess 2-2.c
$ ./mynum
你好,请输入一个数字:988
数字仅限于 1-500 之间,请重新运行本程序!

程序 2-2 使用了 C 语言的“if…else…”条件语句,这是很多语言都有的一个机制(包括一些函数语言,比如 Haskell 的“if…then…else…”),“if…else…”条件语句分为两个部分:第 1 个部分是 if 语句段,表示如果 if 后面所跟的条件满足要求的话,则执行 if 语句段; 第 2 个部分是 else 语句段,表示如果 if 后的条件不满足要求时执行的语句段。

什么是条件满足与不满足呢?C 语言可理解为:如果条件的返回值非 0 则表示条件满足,如果是 0 则表示条件不满足。

可以将多个条件组合成一个综合条件作为“if…else…”条件语句的条件,方式是使用“||”(表示或者)或“&&”(表示并且),比如,程序 2-2 的条件是“mynum>500 ||mynum<1”。

用非 0 与 0 来判断条件的真假让 C 语言的条件语句具备较强的灵活性,但是这会带来一个困扰:在 C 语言条件语句中,NULL 和 0 的值是一样的,而 NULL 常用于指针和对象,0 常用于 int 等整型数,这就意味着,如果出现了类似下面的语句块,则是对含有指针变量的条件进行判断。例如,在下面这种形式的代码中,mypoint 指向了其他变量的内存地址,如果指针变量 mypoint 指向的地址为 NULL,则表示 mypoint 指向的地址是无效的,否则是有效的。示例代码如下:

复制代码
if (mypoint!=NULL){
............// 指针指向内容有效时执行的语句块
}
else{
............ .// 指针指向内容无效时执行的语句块
}

也可以在条件中使用“!”(表示逻辑非),进一步简化对 mypoint 是否有效的判断,示例代码如下:

复制代码
if (!mypoint){
............// 指针指向内容有效时执行的语句块
}
else{
............ .// 指针指向内容无效时执行的语句块
}

C指针原理揭秘:基于底层实现机制(9):C语言快速入门 2.2.2

购书地址 https://item.jd.com/12533413.html?dist=jd

评论

发布