C++学习笔记(一)
2016-01-07 20:47
302 查看
C++
Primer Plus习题
第五章编程练习7:设计一个名为car的结构,用它存储下述有关汽车的信息:生产商(存储在字符数组或string对象中的字符串)、生产年份(整数)。编写一个程序,向用户询问有多少辆车。随后,程序使用new来创建一个由相应数量的car结构组成的动态数组。
我编的程序如下:
struct car
{
char maker[20];
int years;
};
int main()
{
int i_limit,i;
cout<<”How many cars do you wish to catalog? “;
cin>>i_limit;
}
斜体部分注释掉之后结果如下:
程序没有等待输入maker
使用cin.ignore();或者fflush(stdin);清除缓存之后就可以完成习题要求了。
学习心得:
不使用cin.ignore()时,没有等待输入maker。主要是因为cin.getline的读取原理,它是将以‘/n’为结束符做为一完整读取的一行,’/n’会读但不会赋值给数组。所以当之前用cin读取一个字符的时候,你会输入一个字符然后点击回车,那么下面cin.getline读的时候会读入这个回车,并判断结束了,然后赋值给数组第一行,这样数组第一行就是空行。
扩展来说,cin.ignore()的用法如下:
cin.ignore(a,ch)方法是从输入流(cin)中提取字符,提取的字符被忽略(ignore),不被使用。每抛弃一个字符,它都要计数和比较字符:如果计数值达到a或者被抛弃的字符是ch,则cin.ignore()函数执行终止;否则,它继续等待。它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。比如可以这么用:cin.ignore(1024,’\n’),通常把第一个参数设置得足够大,这样实际上总是只有第二个参数’\n’起作用,所以这一句就是把回车(包括回车)之前的所以字符从输入缓冲(流)中清除出去。
备注:在这个程序中,还没有弄清楚结构体数组的用法。因此结果虽然正确,但是程序有可能可以简化。至于这一块下一次看到了再弄清楚。
Primer Plus习题
第五章编程练习7:设计一个名为car的结构,用它存储下述有关汽车的信息:生产商(存储在字符数组或string对象中的字符串)、生产年份(整数)。编写一个程序,向用户询问有多少辆车。随后,程序使用new来创建一个由相应数量的car结构组成的动态数组。
我编的程序如下:
include
using namespace std;struct car
{
char maker[20];
int years;
};
int main()
{
int i_limit,i;
cout<<”How many cars do you wish to catalog? “;
cin>>i_limit;
car *ps=new car[i_limit]; for(i=0;i<i_limit;i++) { cout<<"Car #"<<i+1<<": "<<endl; cout<< unitbuf <<"Please Enter the maker: "; ******//cin.ignore(); //fflush(stdin);****** cin.getline(((ps+i)->maker),20); cout<<endl<<"Please Enter the year made: "; cin>>(ps+i)->years; cout<<endl; } cout<<"Here is your collection: "<< endl; for(i=0;i<i_limit;i++) { cout<<(ps+i)->years<<" "<<(ps+i)->maker<<endl; } delete [] ps; cin.get(); cin.get(); return 0;
}
斜体部分注释掉之后结果如下:
程序没有等待输入maker
使用cin.ignore();或者fflush(stdin);清除缓存之后就可以完成习题要求了。
学习心得:
不使用cin.ignore()时,没有等待输入maker。主要是因为cin.getline的读取原理,它是将以‘/n’为结束符做为一完整读取的一行,’/n’会读但不会赋值给数组。所以当之前用cin读取一个字符的时候,你会输入一个字符然后点击回车,那么下面cin.getline读的时候会读入这个回车,并判断结束了,然后赋值给数组第一行,这样数组第一行就是空行。
扩展来说,cin.ignore()的用法如下:
cin.ignore(a,ch)方法是从输入流(cin)中提取字符,提取的字符被忽略(ignore),不被使用。每抛弃一个字符,它都要计数和比较字符:如果计数值达到a或者被抛弃的字符是ch,则cin.ignore()函数执行终止;否则,它继续等待。它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。比如可以这么用:cin.ignore(1024,’\n’),通常把第一个参数设置得足够大,这样实际上总是只有第二个参数’\n’起作用,所以这一句就是把回车(包括回车)之前的所以字符从输入缓冲(流)中清除出去。
备注:在这个程序中,还没有弄清楚结构体数组的用法。因此结果虽然正确,但是程序有可能可以简化。至于这一块下一次看到了再弄清楚。
相关文章推荐
- C++模版总结(2/2)
- c++实现gray code(格雷码)
- FileTool.exe 替换 Visual C++ 中的打开和添加到项目功能
- 《C++Primer 5e》学习笔记(6):类
- c++ 优秀文章
- 【C++11新特性】 nullptr关键字
- C和C++内存管理详解
- 欢迎使用CSDN-markdown编辑器
- explicit C++关键字
- C++错误调试集锦
- ubuntu 安装 GCC 和 G++ C++ 开发环境
- 新手学习C++笔记6:头文件和析构函数
- POJ 1007_DNA Sorting
- C语言之理解main 参数意义
- c++ 与C#比较
- 分享C++/C如何开机自动启动代码和c的改错题
- C++ 键盘钩子
- C语言socket 蓝牙文件传输
- 一般PID的C语言实现
- 利用ucontext.h中接口实现用户级别线程库