C++primer(第五版) 第一章 学习笔记

Ⅰ. 算法:交换两个变量的值
(P11 1.4.1节 练习1.11)
方法1.标准算法

int a,b,t;
t=a;
a=b;
b=t;

方法2.算术运算

int a,b;
a=b-a;//或者 a=a+b;
b=b-a;//b=a-b;
a=b+a;//a=a-b;

方法3.位运算

int a,b;
a=a^b;
b=a^b;
a=a^b;//任意一个数与任意一个给定值连续两次异或值不变

方法4.指针地址运算

if(a>b)
{
    a=(int*)(b-a);
    b=(int*)(b-(int(a)&0x0000ffff));
    a=(int*)(b+(int(a)&0x0000ffff));
}
else
{
    b=(int*)(a-b);
    a=(int*)(a-(int(b)&0x0000ffff));
    b=(int*)(a+(int(b)&0x0000ffff));
}

Ⅱ. 文件结束符
1.(P14 从键盘输入文件结束符)
对流结束标志检查的方式有两种:阻塞式和非阻塞式。
①.阻塞式检查方式:只有在回车键按下之后才对此前是否有 Ctrl+Z 组合键按下进行检查。
②.非阻塞式检查方式:按下 Ctrl+D 组合键之后立即响应。
Windows系统中一般采用阻塞式检查 Ctrl+Z。
Unix/Linux系统下一般采用非阻塞式的检查 Ctrl+D。
阻塞式检查方式的特点:
①.只有按下回车之后,才会把数据放入缓冲区,并检测在此之前是否有Ctrl+Z按下。
②.如果输入缓冲区中有可读的数据则不会检测Ctrl+Z(因为有要读的数据,还不能认为到了流的末尾)。
注意:
①.如果Ctrl+Z位于一行的中间,则系统会读取这个无意义的字符,但是后续的字符并不是读取,而是直接丢弃(因为Ctrl+Z产生的不是一个普通的ASCII码值,也就是说它产生的不是一个字符,所以不会跟其它从键盘上输入的字符一样能够存放在输入缓冲区)。
②.输入流结束的条件就是:^Z (Ctrl+Z)之前不能有任何字符输入(回车除外),否则 ^Z 起不到流结束的作用。
因此,结束时需要先按下回车,然后输入Ctrl+Z,最后连续按两次回车。
参考:
cin中Ctrl+Z无法结束的问题
Window对于cin输入流结束的判断

2.(P15 1.4.4 if语句)
书中if语句的程序在VC++6.0中运行时,无法出现书中的演示输出。
输入一行数字后,按下回车,除最后一组同类数字外全部输出,再按下回车,键入Ctrl+Z,两次回车后,最后一组同类数字的结果才会输出。
暂时不知道原因。

Ⅲ. 编程方法
(P20 1.5.1节 练习1.20)
读取一组书籍销售记录,将每条记录打印到标准输出上。
方法1.对象数组

int main()
{
    Sales_item item[10];
    int i=0;
    while(std::cin>>item[i])
        i++;
    for(int j=0;j<i;j++)
        std::cout<<item[j]<<std::endl;
    return 0;   
}

方法2.对象指针???

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值