C 语言编程注意点(会不断修正)

7 篇文章 0 订阅
7 篇文章 0 订阅

Bool

  C语言(或C++)里本身没有bool这种布尔类型。有些编译器可以识别,这是因为编译器自己定义了bool类型,比如:#define bool int。

  C语言里,一般用整形变量来实现布尔类型变量的功能。当用条件语句,如if,进行判断时,值为0时,返回false,其它都返回true。

  可以这么实现 enum BOOL {FALSE = 0, TRUE = !FALSE};


Linux 

  不支持while(true),但支持while(1),和bool也是有一定关系。

  typedef struct tagPOINT{

   BYTE b; 

   BYTE g; 

   BYTE r;

  } POINT; 当定义变量时,如:struct POINT in; 会有警告,去掉struct变为 POINT in;


  循环中char 类型的循环读取解决方法:

   int i =0;

  char tmp, ch;//ch是需要的最终结果

  while((tmp = getchar()) != '\n')

  {

        i++;

        if(i = 1) ch = tmp;

  }

  总结:scanf() 在按回车时,会残留一个字符\n。scanf()和getchar()函数是从输入流缓冲区中读取的,而并非从键盘(也就是终端)缓冲区读取。而读取时遇到回车(\n)而结束,这个\n会一起读入输入流缓冲区的,所以第一次接受输入时取走字符后,留下字符\n,这样第二次的读入函数直接从缓冲区把\n取走了,显然读取成功了,所以不会再从终端读取!因此后面只要加上fflush(stdin)函数释放缓冲区数据就可以(测试这个,没通过,情况是一个循环中反复输入一个char变量,用列出方式解决了)。


随机获取随机数(VC 6.0)

c语言版本:

 #include<time.h>

 void main()

  {

        int randomNumber;

        srand(time(NULL)); //因为要以时间为轴作为种子

        randomNumber = rand()%9; //表示产生0~9的随机数

  }

c++语言版本:

 #include <iostream>

 #include <time.h>

 using namespace std;

 #define RANGE 100 //产生一个在0~100之间的数

 int main(){

 srand((unsigned)time(NULL));//srand()函数产生一个以当前时间开始的随机种子

 cout << rand()%RANGE << endl; 

 return 0;

 }

解释说明:

  rand()是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子。如果第一次调用rand()之前没有调用srand(),那么系统会自动调用srand()。而使用种子相同的数,调用srand()会导致相同的随机数序列被生成。srand()则使用系统定时/计数器的值作为随机种子。每个种子对应一组根据算法预先生成的随机数,所以,在相同的平台环境下,不同时间产生的随机数会是不同的,相应地,若将srand((unsigned) time(NULL));改为srand(CONSTANT_NUMBER)(CONSTANT_NUMBER为任意一个常量),则无论何时运行或运行多少次,得到的"随机数"都会是一组固定的序列,因此srand生成的随机数是伪随机数。

  1.rand()

  原型:int rand(void);

  rand()是真正的随机数产生器,返回从srand(seed)中指定的seed-RAND_MAX[0x7FF]之间均匀分布的伪随机整数。即[ seed, RAND_MAX]。

  2.srand()

  原型:void srand(unsigned seed);

  参数seed是rand()的种子,用来初始化rand()的起始值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值