c++学习笔记---03---从一个小程序说起2
从一个小程序说起2
要求:编写一个程序,要求用户输入一串整数和任意数目的空格,这些整数必须位于同一行中,但允许出现在该行中的任何位置。当用户按下键盘上的“Enter”键时,数据输入结束。程序自动对所有的整数进行求和并打印出结果。
C语言版本:
#include <stdio.h>
#include <stdlib.h> void main()
{
int i;
int sum = ;
char ch; printf("请输入一串整数和任意数目的空格: "); while( scanf("%d", &i) == )
{
sum += i; while( (ch=getchar()) == ' ' ) // 屏蔽空格
; if( ch == '\n' )
{
break;
} ungetc( ch, stdin ); // 将变量ch 中存放的字符退回给stdin输入流。
} printf("结果是: %d", sum);
printf("\n");
system("pause");
}
C++语言版本:
#include <iostream> using namespace std; int main()
{
int sum = ;
int i; cout << "请输入一串整数和任意数目的空格:"; while( cin >> i )
{
sum += i;
while( cin.peek() == ' ' )
{
cin.get();
}
if( cin.peek() == '\n' )
{
break;
}
} cout << "½á¹ûÊÇ: " << sum << endl; return ;
}
C++版本分析
这个程序使用了流对象 cin。这个对象的类型是istream,它知道如何从用户终端读取数据。
cin >> i;
cin 输入操作符又称为提取操作符,它一次从输入流对象cin 提取一个整数。
当用户进行键盘输入时,对应的字符将输入到操作系统的键盘缓冲区中。
这样,当用户点击键盘上的“Enter”键时,操作系统把键盘缓冲区的内容传输到cin 流的内部缓冲区,“>>”操作符随后从这个缓冲区提取需要的信息。
我们还发觉,如果用户不进行键盘的输入,程序将会阻塞。这是阻塞性(blocking)IO的例子。
“>>”最初定义为右移操作符,它在C++ 中进行了重载,当它按照这里所示的方式使用时,它就用于从输入流对象提取信息。
另外,这个操作符对所有内建的数据类型都进行了重载,所以它可以从输入流对象提取出int, float, double 型数据,也可以提取字符串等数据。
在while( cin >> i ) 中,表达式 cin >> i 返回输入流对象本身,也就是cin。但是,如果到达了文件尾或者提取操作符遇到一个非法值,这个返回值将是 false。
我们小举一个例子:如果我们试图把一个浮点数读取到一个 int 型变量中,当提取操作符遇到小数点时,它将使输入流对象置于一个错误的状态中,导致 cin 的值为 false。
注意,在while( cin >> i ) 中,当用户在键盘上点击“enter”键的时候,在这一句并不会结束。
另外,观察两个程序,我们发现:C 和 C++事实上在声明变量的事实上有点不同,C++允许我们在程序的任意位置声明变量。
这大大的提高了大型C++ 程序的可读性,因为这样子我们就可以在实际需要使用变量的时候才来声明他们。
cin、cout对象的多个方法
前边我们讲过,cin 是 istream类的对象,那么cin 同样具有一些方法,这些方法可以增强对于输入操作的控制,下边我们将通过简单的例子介绍 cin 的一些方法!
例子一:cin.ignore()和cin.getline()
#include <iostream> using namespace std; int main()
{
char buf[]; cin.ignore();
cin.getline( buf, ); cout << buf << endl; return ;
}
例子二:cin.get()和cin.peek()
#include <iostream> using namespace std; int main()
{
char p;
cout << "请输入一段文本: \n"; while( cin.peek() != '\n' )
{
p = cin.get();
cout << p;
}
cout << endl; return ;
}
例子三:cin.gcount()和cin.read()
#include <iostream> using namespace std; int main()
{
const int SIZE = ;
char buf[SIZE]; cout << "请输入一段文本: ";
cin.read( buf, ); cout << "字符串收集到的字符数为: "
<< cin.gcount() << endl; cout << "输入的文本信息是: ";
cout.write( buf, );
cout << endl; return ;
}
前边我们已经介绍了几种常用的 cin 对象的方法,下边再介绍几种关于 cout 对象的方法。同样我们通过实例在让大家快速认识!
实例一:cout.precision()
#include <iostream>
#include <math.h> using namespace std; int main()
{
double result = sqrt(3.0); cout << "对 3 开方保留小数点后0 ~ 9 位,结果如下: \n" << endl; for( int i=; i <= ; i++ )
{
cout.precision(i);
cout << result << endl;
} cout << "当前的输出精度为: " << cout.precision() << endl; return ;
}
实例二:cout.width()
#include <iostream> using namespace std; int main()
{
int width = ;
char str[]; cout << "请输入一段文本: \n";
cin.width(); while( cin >> str )
{
cout.width(width++);
cout << str << endl;
cin.width();
} return ;
}
c++学习笔记---03---从一个小程序说起2的更多相关文章
- c++学习笔记---04---从另一个小程序接着说
从另一个小程序接着说 文件I/O 前边我们已经给大家简单介绍和演示过C和C++在终端I/O处理上的异同点. 现在我们接着来研究文件I/O. 编程任务:编写一个文件复制程序,功能实现将一个文件复制到另一 ...
- C#.NET学习笔记2---C#.第一个C#程序
C#.NET学习笔记2---C#.第一个C#程序 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com 6.第一个C#程序: ...
- Spark学习笔记1——第一个Spark程序:单词数统计
Spark学习笔记1--第一个Spark程序:单词数统计 笔记摘抄自 [美] Holden Karau 等著的<Spark快速大数据分析> 添加依赖 通过 Maven 添加 Spark-c ...
- 学习笔记:mpvue开发小程序——入门
接下来可能要开发一个小程序,同事推荐使用mpvue,那么我提前熟悉下. 官网地址:http://mpvue.com/ 1.快速上手 http://mpvue.com/mpvue/quickstart/ ...
- 【opencv学习笔记五】一个简单程序:图像读取与显示
今天我们来学习一个最简单的程序,即从文件读取图像并且创建窗口显示该图像. 目录 [imread]图像读取 [namedWindow]创建window窗口 [imshow]图像显示 [imwrite]图 ...
- OD学习笔记10:一个VB程序的加密和解密思路
前边,我们的例子中既有VC++开发的程序,也有Delphi开发的程序,今天我们给大家分析一个VB程序的加密和解密思路. Virtual BASIC是由早期DOS时代的BASIC语言发展而来的可视化编程 ...
- 学习笔记_第一个strut程序_之中文乱码,过滤器解决方案及过程总结
1. 第一次碰到加过滤器的过程,就是在学习struct1的时候,中文乱码 几个需要注意的关键字 2.什么叫package 所谓package就是打包的意思,就是说以下程序都是处于这个包内,所以一开始 ...
- OpenGL学习笔记:第一个OpenGL程序
OpenGL环境搭建参考博客:VS2015下OpenGL库的配置. #include<GL\glew.h> #include<GLTools.h> #include<GL ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:第一个Spring程序
1. 创建项目 在 MyEclipse 中创建 Web 项目 springDemo01,将 Spring 框架所需的 JAR 包复制到项目的 lib 目录中,并将添加到类路径下,添加后的项目如图 2. ...
- verilog学习笔记(2)_一个小module及其tb
module-ex_cnt module ex_cnt( input wire sclk, input wire rst_n, output wire[9:0] cnt ); reg [9:0] cn ...
随机推荐
- poj2155一个二维树状数组
...
- 关于form表单或者Ajax向后台发送数据时,数据格式的探究
最近在做一个资产管理系统项目,其中有一个部分是客户端向服务端发送采集到的数据的,服务端是Django写的,客户端需要用rrequests模块模拟发送请求 假设发送的数据是这样的: data = {'s ...
- 跨平台移动端APP开发---简单高效的MUI框架
MUI是dcloud(数字天堂)公司旗下的一款跨平台开发移动APP的框架产品,在学习MUI框架之前,最先接触了Hbuilder代码编辑器,它带给我的第一感觉是快,这是HBuilder的最大优势,通过完 ...
- vue数组语法兼容问题
先来一行代码: <a :href="['NewsNote.asp?ID='+item.ID+'&MenuType=C']" v-text="item.Tit ...
- Python自学笔记-生成器(来自廖雪峰的官网Python3)
感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. 生成器 通过列 ...
- [js插件开发教程]一步步开发一个可以定制配置的隔行变色小插件
隔行变色功能,不用js,直接用css伪类就可以做,这个实例可以作为js插件开发很好的入门级实例.本文实现的隔行变色包括以下功能: 1,支持2种常用结构共存( div元素 和 表格类型 ) 2,一个页面 ...
- Windows下编译Python2.7源码
本文开始一个系列文章,深入理解Python源码,算是阅读<Python源码剖析>一书的读书笔记,是一项长期进行的工作.一共分三个部分:Python对象模型,Python虚拟机,Python ...
- dom4j之小小工具
dom4j经常不用,方法忘了又记,故做出读取xml和把document写入xml的小小工具~~~ /** * 读取document和将document对象写入到xml的小工具 * 使用该类必须给出do ...
- java反射获取字段的属性值,以及为字段赋值等方法
1.获取某个类的属性值 /*利用getter方法获取值(首字母大写) CjJssetDTO obj: */ String filedName = "Cj"+(i+1); Class ...
- ovs2.7 在系统重启后,再次使用时提示数据库无法连接的问题。
问题现象如下,ovs开始安装后,对ovs的操作是正常的,但是,现在系统重启后,OVS的操作第一条命令就失败,如下: 问题解决方法: 参考 http://blog.csdn.net/xyq54/art ...