『C++ Primer学习笔记』Chapter 1
来源:互联网 发布:beatbox教学软件 编辑:程序博客网 时间:2024/05/17 04:20
概括
1.1. 编辑器、编译器和集成了编译器的IDE的区别;使用DOS命令行语句调用不同的编译器编译源文件和设置支持C++11的参数;
1.2. iostream库中的cin和cout的使用;
1.3. 单行注释与双行注释;
1.4. 控制流:while语句、for语句以及if语句;读入不定量的输入数据的方法(使用含有cin的表达式作为条件语句);
1.5-1.6. 类的简单介绍:定义类类型以及对应的操作;文件重定向;
在命令行使用GCC编译器编译文件
在使用命令行语句编译源文件之前,我们需要配置好GCC编译器(如何配置GCC编译器参考之前的文章1:windows平台安装GCC编译器),在未说明的情况下,以后所有的代码均基于VS2010的编辑器和4.8.1版本的GCC编译器在DOS下使用命令行进行编译。
我们尝试编写一个hello world的代码:
#include<iostream>int main(){ std::cout<<"hello world!"<<std::endl; return 0;}
并保存为test.cpp后缀的文件,然后打开DOS并设置到该cpp文件所在的目录下,然后运行如下图中所示的命令:
如果运行正确,则会默认生成一个名为a.exe的可执行文件(因为我们并未命名它),接着我们直接运行生成的可执行文件:
则会出现如上图所示的结果。对于有些需要添加对C++11支持才能编译的源文件,则只需要输入如下代码:
g++ test.cpp -std=c++11
读入不定量数据的结束问题
使用cin读取不定量数据常常会出现一个问题:使用Ctrl+Z并不能够使程序结束。一个简单的例子:
#include<iostream>int main(){ char val; while(std::cin>>val) std::cout<<val<<std::endl; return 0;}
参考文章2while(cin>>str)无法结束的问题可以发现,这其中的原因可以总结为:
Windows环境下的流结束标志Ctrl+Z的检查方式为阻塞式:只有按下回车之后才有可能检测在此之前是否有Ctrl+Z按下;如果Ctrl+Z之前有可读的数据,则按下回车之后不会检测在此之前是否有Ctrl+Z按下;
Ctrl+Z产生的不是一个普通的ASCII码值,也就是说它产生的不是一个字符,所以不会跟其它从键盘上输入的字符一样能够存放在输入缓冲区;
因此,比较合理的使用Ctrl+Z的方法就是:输入数据、回车并按下Ctrl+Z;而不是输入数据、按下Ctrl+Z并回车。
在实际使用中,如果上述代码中val
的类型为int
,则第二种方法也可行,具体原因有待研究。
cin的常见问题
连续使用cin时经常会出现问题,比如文献3c++中cin.clear()的重要性 和文献4cin.clear()、cin.sync()和cin.ignor()的用法 中所述的情况。在此,参考这两篇文献,我们做以简要的总结:
cin.clear()
作用:改变cin的状态标识符使其能够正常输入,如果没有改变其状态只清除缓冲区的数据流也无法正常输入,因此常至于其他两个语句前边一起使用;
cin.ignor(a,ch)
作用:从输入流cin中提取字符,提取的字符被忽略(ignore)不被使用。每抛弃一个字符,它都要计数和比较字符:如果计数值达到a或者被抛弃的字符是ch,则函数执行终止;否则,它继续等待。它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。
cin.sync()
作用:清除输入缓冲区的数据流。由于程序运行时并不总是知道外部输入的进度,很难控制是不是全部清除输入缓冲区的内容。通常我们有可能只是希望放弃输入缓冲区中的一部分,而不是全部。比如清除掉当前行、或者清除掉行尾的换行符等等。但要是缓冲区中已经有了下一行的内容,这部分可能是我们想保留的。这个时候最好不要用cin.sync()
,可以使用cin.ignor()
代替,因此cin.ignor()
相比cin.sync()
可以更精确地控制缓冲区。
使用文件重定向
使用文件重定向可以避免反复输入,而且大多数操作系统支持文件重定向,在此我们仍然以:
#include<iostream>int main(){ char val; while(std::cin>>val) std::cout<<val<<std::endl; return 0;}
这个例子为例介绍如果在Windows环境下的DOS里使用文件重定向。我们将上述代码保存为test.cpp,然后进行编译,同时在当前目录下生成一个in.txt文件,输入我们需要输入的数据并保存,然后输入命令:
a<in.txt>out.txt
则会发现在当前目录下生成了一个out.txt文件,该文件内容即为我们in.txt中我们需要输入的数据。具体如下图所示:
参考文献
- windows平台安装GCC编译器; ↩
- while(cin>>str)无法结束的问题; ↩
- c++中cin.clear()的重要性 ; ↩
- cin.clear()、cin.sync()和cin.ignor()的用法 ; ↩
- 『C++ Primer学习笔记』Chapter 1
- C++Primer Chapter One学习笔记
- 《C primer plus》笔记--Chapter 1
- 『C++ Primer学习笔记』Chapter 2
- 『C++ Primer学习笔记』Chapter 4
- 『C++ Primer学习笔记』Chapter 5
- C++primer学习笔记(1)
- C++Primer学习笔记《1》
- 『C++ Primer学习笔记』Chapter 3——string对象、vector对象以及数组的配套类型,C风格字符串问题和处理区别
- C++PRIMER学习笔记
- c++primer学习笔记
- c++primer学习笔记
- C++primer学习笔记
- c++primer 学习笔记
- C++Primer 学习笔记
- c++primer学习笔记
- C++Primer学习笔记
- C++PRIMER 学习笔记
- EL表达式截取字符串
- 礼拜四log~js控制台输出 & c:forEach
- Linux Netlink
- STM32读写保护功能及设置
- Android studio的gradle目录结构
- 『C++ Primer学习笔记』Chapter 1
- Eclipse 插件安装jetty
- ehcache 使用笔记
- 单例
- sdas
- ExpandableListView使用重要方法总结
- C#查找8邻域连通域算法
- UIAlertControllr的使用
- 使用Autolayout实现UITableView的Cell动态布局和高度动态改变