c++学习笔记---03---从一个小程序说起2

从一个小程序说起2

要求:编写一个程序,要求用户输入一串整数和任意数目的空格,这些整数必须位于同一行中,但允许出现在该行中的任何位置。当用户按下键盘上的“Enter”键时,数据输入结束。程序自动对所有的整数进行求和并打印出结果。

C语言版本:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3
 4 void main()
 5 {
 6       int i;
 7       int sum = 0;
 8       char ch;
 9
10       printf("请输入一串整数和任意数目的空格: ");
11
12       while( scanf("%d", &i) == 1 )
13       {
14             sum += i;
15
16             while( (ch=getchar()) == ‘ ‘ )  // 屏蔽空格
17                   ;
18
19             if( ch == ‘\n‘ )
20             {
21                   break;
22             }
23
24             ungetc( ch, stdin );  // 将变量ch 中存放的字符退回给stdin输入流。
25       }
26
27       printf("结果是: %d", sum);
28       printf("\n");
29       system("pause");
30 }

C++语言版本:

 1 #include <iostream>
 2
 3 using namespace std;
 4
 5 int main()
 6 {
 7       int sum = 0;
 8       int i;
 9
10       cout << "请输入一串整数和任意数目的空格:";
11
12
13       while( cin >> i )
14       {
15             sum += i;
16             while( cin.peek() == ‘ ‘ )
17             {
18                   cin.get();
19             }
20             if( cin.peek() == ‘\n‘ )
21             {
22                   break;
23             }
24       }
25
26       cout << "?á1?ê?: " << sum << endl;
27
28       return 0;
29 }

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()

 1 #include <iostream>
 2
 3 using namespace std;
 4
 5 int main()
 6 {
 7       char buf[20];
 8
 9       cin.ignore(7);
10       cin.getline( buf, 10 );
11
12       cout << buf << endl;
13
14       return 0;
15 }

例子二:cin.get()和cin.peek()

 1 #include <iostream>
 2
 3 using namespace std;
 4
 5 int main()
 6 {
 7       char p;
 8       cout << "请输入一段文本: \n";
 9
10       while( cin.peek() != ‘\n‘ )
11       {
12             p = cin.get();
13             cout << p;
14       }
15       cout << endl;
16
17       return 0;
18 }

例子三:cin.gcount()和cin.read()

 1 #include <iostream>
 2
 3 using namespace std;
 4
 5 int main()
 6 {
 7       const int SIZE = 50;
 8       char buf[SIZE];
 9
10       cout << "请输入一段文本: ";
11       cin.read( buf, 20 );
12
13       cout << "字符串收集到的字符数为: "
14            << cin.gcount() << endl;
15
16       cout << "输入的文本信息是: ";
17       cout.write( buf, 20 );
18       cout << endl;
19
20       return 0;
21 }

前边我们已经介绍了几种常用的 cin 对象的方法,下边再介绍几种关于 cout 对象的方法。同样我们通过实例在让大家快速认识!

实例一:cout.precision()

 1 #include <iostream>
 2 #include <math.h>
 3
 4 using namespace std;
 5
 6 int main()
 7 {
 8       double result = sqrt(3.0);
 9
10       cout << "对 3 开方保留小数点后0 ~ 9 位,结果如下: \n" << endl;
11
12       for( int i=0; i <= 9; i++ )
13       {
14             cout.precision(i);
15             cout << result << endl;
16       }
17
18       cout << "当前的输出精度为: " << cout.precision() << endl;
19
20       return 0;
21 }

实例二:cout.width()

 1 #include <iostream>
 2
 3 using namespace std;
 4
 5 int main()
 6 {
 7       int width = 4;
 8       char str[20];
 9
10       cout << "请输入一段文本: \n";
11       cin.width(5);
12
13       while( cin >> str )
14       {
15             cout.width(width++);
16             cout << str << endl;
17             cin.width(5);
18       }
19
20       return 0;
21 }
时间: 2024-11-18 06:25:04

c++学习笔记---03---从一个小程序说起2的相关文章

C语言学习笔记之第一个C程序及编译运行(一)

一.第一个C程序 1>C程序由函数构成 任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”.所以,你可以说C语言程序是由函数构成的. 2>C程序的入口 C程序的入口是一个名字叫做main的函数,简称main函数.(为了区分函数,每一个函数都有一个名称)也就是说,不管整个程序中有多少个函数,都是先执行main函数.不管main函数写在文件中间,还是文件末尾,也都是先执行main函数. 注意: 如果一个C程序中没有main函数,那么

Servlet&amp;JSP学习笔记:第一个Servlet程序

第一个Servlet程序代码如下,接着根据这个小程序逐步讲解. import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletReq

学习笔记之03-第一个C程序代码分析

一.代码分析 打开项目中的main.c文件(C程序的源文件拓展名为.c),可以发现它是第一个C程序中的唯一一个源文件,代码如下: 1 #include <stdio.h> 2 3 int main(int argc, const char * argv[]) { 4 // insert code here... 5 printf("Hello, World!\n"); 6 return 0; 7 } 1.#include <stdio.h> #include 是

OD学习笔记10:一个VB程序的加密和解密思路

前边,我们的例子中既有VC++开发的程序,也有Delphi开发的程序,今天我们给大家分析一个VB程序的加密和解密思路. Virtual BASIC是由早期DOS时代的BASIC语言发展而来的可视化编程语言. VB是由事件驱动的编程语言:就是在可视化编程环境下我们可以绘制一些窗体,按钮,编辑框等控件,然后为这些控件所可能引发的事件如按钮被单击或者被双击编写对应的处理代码. 所有的VB程序几乎都是依赖于一个外部的动态链接库.这个动态链接库的名字是:MSVBVM60.dll(可能有多个版本,但名字都差

学习笔记_第一个strut程序_之中文乱码,过滤器解决方案及过程总结

1.  第一次碰到加过滤器的过程,就是在学习struct1的时候,中文乱码 几个需要注意的关键字 2.什么叫package 所谓package就是打包的意思,就是说以下程序都是处于这个包内,所以一开始你看见src下拉菜单下面都是一些自己建的就是为了分开结构的作用 3.  建好了,就可以在包的下面建子文件,可以是class类文件,也可以是各种jsp,servlet文件. 4.  任何servlet文件或者显示界面文件都要在web.xml文件中进行配置,才能加载进去,而且是自动加载 5.  写代码的

[Unity热更新]ulua学习笔记01:一个小坑

看了一下以前写的文章,发现都好水啊..我也想写出能真正帮到别人的文章,但没办法啊,自己的脑子太笨了..希望可以通过不断学习,终有一天能写出点好文章! 最近在学习unity中的热更新,既然大神都说ulua效率最高(就现在来说),那就学习ulua吧!首先要下载的是ulua的包,现在的最新版本是1.08,而且根据官网上说的,网上流行的1.03/1.05含有大量的bug,所以我选择了最新的版本,谁知道就掉进了第一个坑! 因为是菜鸟,所以先复制一下网上的代码看看效果如何,结果碰到这样的错误: 搜索了这些错

学习笔记之第一个C程序

1.打开Xcode,新建Xcode项目 2.选择最简单的命令行项目 3.输入项目信息 4.选择一个用来存放C程序代码的文件夹 5.运行项目 运行结果如图(控制台输出)

OpenStack开发学习笔记03————创建一个openstack

当fuel for openstack安装部署完成后,就可以去创建openstack了 首先,打开https://10.20.0.2:8443/      输入默认的  用户名和密码    admin  admin   来进行登陆 登陆 创建openstack 这时上边报错了,,很尴尬......... WARNING: Failed to build the bootstrap image, see /var/log/fuel-bootstrap-image-build.log for det

python学习笔记——贰之购物车小程序_客户端

客户端大概流程 :买家系统 首先输入买家他的余额,之后会进行,通过文件里的来余额判断他是否上次消费过.如果有信息,就按照文件里的余额计算,替换掉买家输入的余额,如果没有信息证明客户是第一次来,就用买家输入的余额. 然后循环输出商品下标,和商品信息.客户通过下标来选择商品.选择的商品会被加入到 购物车列表 中,然后通过下标[1]得到商品的金额.计算出消费金额,这个消费金额 如果大于余额 那么 从购物车列表里删除这个商品 告知 余额不足,并提示买多少钱以内的商品.每加进一个商品,都会计算购物车的总金

python学习笔记——贰之购物车小程序_服务端

服务端大概流程:商家系统 用户可以对商品信息 进行 添加 和 修改,修改包括 删除 和修改功能首先读取文件中的商品信息,转化为列表,然后通过提示 对列表进行操作,最后将列表转成字符串保存到文本当中. 商品信息的文件格式没错就是多个两个逗号,暂时没有好的方法, ['Iphone', 5800],['Mac Pro', 9800],['Bike', 800],['Watch', 10600],['Coffee', 31],('pro', 1899), , #读取商品列表f = open('s1.tx