小甲鱼-C++快速入门笔记(3)之从一个程序说起

上一节课后题代码

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
	int sum = 0;
	char ch;
	
	printf("请输入一串整数和任意数目的空格: ");
	printf("\n");
	
	while (scanf("%d", &i) == 1)
	{
		sum += i;
		while ((ch=getchar()) == ' ')  //屏蔽空格
			;
		if (ch == '\n')
		{
			break;
		}
		ungetc(ch, stdin);  //将变量ch中存放的字符返回给stdin输入流
	}
	printf("结果是: %d", sum);
	printf("\n");
	//system("pause");
   
}

对 getchar和ungetc理解:

getchar()是C语言中的函数,C++中也包含了该函数。getchar()函数的作用是从标准的输入stdin中读取字符。也就是说,getchar()函数以字符为单位对输入的数据进行读取。

getchar()读取缓冲区方式:在控制台中通过键盘输入数据时,以回车键作为结束标志。当输入结束后,键盘输入的数据连同回车键一起被输入到输入缓冲区中。在程序中第一次调用getchar()函数从输入缓冲区中读取一个字节的数据。需要注意的是,如果此时在程序中第二次调用getchar()函数,因为此时输入缓冲区中还有回车键的数据没有被读出,第二个getchar()函数读出的是回车符。

例如

char test1 = getchar();
 
char test2 = getchar();

test1的值是字符"a",而test2的值是"\n" ,这样显然不是我们所需要的

解决方法:可以使用rewind()函数来清理输入缓冲区中的数据,该函数的作用是将文件指针移动到文件的起始位置处。rewind()函数清理指定流中的错误指示符以及文件结束指示符。

如下

char test1 = getchar();
 
rewind(stdin);
 
char test2 = getchar();
 
rewind(stdin);

 在控制台中,首先输入字符“a”然后按下回车键。getchar()函数从输入缓冲区中读取字符“a”,之后调用rewind()函数清理输入缓冲区中的数据,stdin表示输入缓冲区的指针;之后再在控制台中输入字符“b”,然后按下回车键,getchar()函数从输入缓冲区中读取字符“b”,最后再次调用rewind()函数清理输入缓冲区中的数据。此时test1的值为"a",test2的值为"b".


 

C++版本

#include <iostream>
using namespace std;
int main()
{
	int sum = 0;
	
	cout << "请输入一串整数和任意数目的空格: " << endl;;
	int i;
	while (cin >> i)
	{
		sum += i;
		while (cin.peek() == ' ')  //屏蔽空格
		{
			cin.get();
		}
		if (cin.peek() == '\n')
		{
			break;
		}
	}
	cout << "结果是: " << sum << endl;
   
}

1、使用了流对象cin, ">>"最初定义为右移操作符,对所有内建的数据类型都进行了重载,所以它可以从输入流对象提取出int,float,double型数据,也可以提取字符串等数据.

2、cin  cout对象的多个方法

cin.ignore(n, ch);     忽略前n个字符

cin.getline(str, n, ch);     从输入流从接收n个字符到str变量中,只能读取一行的内容

cin.peek();      取得输入流中的第一个字符进行其他操作如比较,但是不影响输入流中的数据。

cin.get();     从输入流中读取一个字符,输入流的数据被取走。

cin.gcount();     获取一个字符变量中包括空白字符的个数

cin.read(buf, 20);     读取前20个字符到buf中, 不限定行数直到到达结束标志为止。

cout.precision(n);    设置精度为n     

cout.width();         将显示当前的字段宽度,默认为0,默认是右对齐的方式,就是说如果当前数据宽度不够n那么剩余的位置就要在左端用空格补全。

cout.fill(ch);       用ch来替代原有的填充字符

观察发现两个程序的不同之处:

c和c++事实上在声明变量时有点不同,c++允许我们在程序的任意位置声明变量.这大大提高了大型c++程序的可读性,因为这样我们就可以在实际需要使用变量的时候才来声明他们.

猜你喜欢

转载自blog.csdn.net/qq_30708445/article/details/88407334
今日推荐