C++学习笔记2020.3.12(下)

while循环

for循环和while循环几乎等效

等待一段时间:编写延迟循环

#include
using namespace std;
int main(void){
	long wait=0;
	while (wait<100){
		wait++;
	};
	return 0;
}
  ANSI C和C++库中有一个函数有助于完成这样的工作.
 这个函数名为clock(),用于返回程序开始执行后所用的系统时间
 但是存在两个问题:
 1 clock()返回的不一定是秒数;
 2 在不同系统上操作返回的类型可能不相同;
    可以用ctime中的一个符号常量 CLOCKS_PER_SEC,
 该常数等于每秒钟包含的系统时间单位数.
 
#include
#include
using namespace std;
int main(void){
	float secs;
	cin>>secs;
	clock_t delay=secs*CLOCKS_PER_SEC;
	cout<<"starting\a\n";
	clock_t start=clock();
	while (clock()-start<delay);
	cout<<"done\a\n";
	return 0;
}

类型别名

1#define name type
例子:

#define Byte char;

2typedef type name

typedef char * Byte;

do while 循环

do while 循环与其他循环的区别:
do while 循环至少执行循环体一次,
其他循环至少执行循环体0次.

for :
#include
using namespace std;
int main(void){
	int x=10;
	for (;x<10;x++)
	 	cout<<x<<endl;
	cout<<x<<endl;
	return 0;
}
while :
#include
using namespace std;
int main(void){
	int x=10;
	while (x<10){
		cout<<x<<endl;
		x++;
	}
	cout<<x<<endl;
	return 0;
}
do while :
#include
#include
using namespace std;
int main(void){
	int x=10;
	do{
		cout<<x<<endl;
		x++;
	}while (x<10);
	cout<<x<<endl;
	return 0;
}

基于范围的for循环:

C++11版本新增了一种循环:基于范围(range-based)的for循环.

改变元素:
#include
int main(void){
	double price[5]={0.1,0.2,0.3,0.4,0.5};
	for (double &x:price)
		x=x*5;
	return 0;
}

输出元素:
#include
int main(void){
	double price[5]={0.1,0.2,0.3,0.4,0.5};
	for (double x:price)
		cout<<x<<std::endl;
	return 0;
}

循环和文本输入:

使用原始的cin进行输入:

方法一:选择某一个特殊字符(通常被称为哨兵字符),将其作为停止标志
#include
using namespace std;
int main(void){
	char ch;
	int count=0;
	cin>>ch;
	while (ch!='!'){
		cout<<ch;
		count++;
		cin>>ch;
	}
	cout<<count<<endl;
	return 0;
}
注: cin会自动忽略空格和换行符

如果希望的到每个字符(包括空格 制表符 换行符):

#include
using namespace std;
int main(void){
	char ch;
	int count=0;
	cin>>ch;
	while (ch!='!'){
		cout<<ch;
		count++;
		cin.get(ch);
	}
	cout<<count<<endl;
	return 0;
}

文件尾条件:

如果输入来自于文件,则可以使用一种功能强大的技术—检测文件尾(EOF)

	如果编程环境能够检测EOF,
	可以在类似于上一个程序示例中使用重定向文件的文件
	(重定向:假设在Windows中有一个名为gofish.exe的可执行程序和一个
名为fishtale的文本文件,则可以在命令提示符模式下输入下面的命令
gofish < fishtale
,这样程序将从fishtale文件(而不是键盘)获取输入,符号 < 是Unix和Windows
命令提示符模式的重定向运算符)
检查到EOF后,cin将两位(eofbit和failbit)都设置为1.
可以用成员函数eof()来查看eofbit是否被设置;如果检查到EOF,则cin.eof()将会返回bool值true,否则返回false
如果eofbit或failbit)被设置为1.则fail()成员函数返回true,否则返回false

注意: fail()和eof()方法报告最近读取的结构(事后报告)

#include
using namespace std;
int main(void){
	char ch;
	int count=0;
	cin>>ch;
	while (cin.fail()== false){
		cout<<ch;
		count++;
		cin.get(ch);
	}
	cout<<count<<endl;
	return 0;
}
C++:cin.get()→C:getchar()
C++:cin.put()→C:putchar()

EOF常量在iostream中被定义,其必须不同于任何有效的字符值,一边程序不会将EOF和常规字符混淆.通常EOF被定义为值-1,因为ASCLL中没有值为-1的字符

改编上述程序:

#include
using namespace std;
int main(void){
	int ch;
	int count=0;
	ch=cin.get();
	while (ch != EOF){
		cout.put(ch);
		count++;
		ch=cin.get();
	}
	cout<<count<<endl;
	return 0;
}

继续简便一下:

#include
using namespace std;
int main(void){
	int ch;
	int count=0;
	while ((ch=cin.get()) != EOF){
		cout.put(ch);
		count++;
	}
	cout<<count<<endl;
	return 0;
}

((ch=cin.get()) != EOF) !=的优先级高于=,所以加括号

嵌套循环和二维数组

二维数组的定义:

type name[rows][colums]

多维数组可用嵌套循环进行部分操作:

#include
using namespace std;
int main(void){
	int arr[2][2]={{1,20},{2,10}};
	for (int i=0;i<2;i++){
		for (int j=0;j<2;j++){
			cout<<arr[i][j]<<' ';
		}
		cout<<endl;
	}
	return 0;
}

你可能感兴趣的:(C++)