您的位置:首页 > 文旅 > 美景 > C++基础语法:while的使用

C++基础语法:while的使用

2024/12/23 9:20:58 来源:https://blog.csdn.net/jllws1/article/details/141435921  浏览:    关键词:C++基础语法:while的使用

前言

      "打牢基础,万事不愁" .C++的基础语法的学习."学以致用,边学边用",编程是实践性很强的技术,在运用中理解,总结.

引入

        while的使用是编写代码的基础内容.笔者的记忆力已不如以前,最近遇到了还花了不少功夫,可见是掌握地不够牢固.所以对while的思路和内容做一个归纳,便于以后使用.当然最重要的还是在思路的推导和总结.

while的概览

        while指的是条件循环.即:满足条件在代码块中反复执行,条件不满足则退出. 

        代码格式:while(循环条件){        //while的代码块语句1;语句2;}                

        使用while的重点有两个,他们都围绕着while的条件

        1.循环条件的描述                        2.退出循环的条件

        循环条件

        while后跟着的循环条件,是一个返回值为bool类型的表达式.

        例如:        true;                     //bool类型值,可以做表达式

                        a>b;                     //比较表达式,返回值是bool类型

                        a<b && a>c         //逻辑表达式,返回值是bool类型

                         cin>>a;              //输入语句,他的返回值也是bool类型;成功执行返回true,否则false

        退出循环条件

        如果没有退出循环条件,那么只能是无限循环,这通常是不想被看见的情况

//无限循环1
while(true){cout<<"hello"<<endl;
}
//无限循环2
int a=2;
while(a>1){cout<<"hello"<<endl;
}

        因此可以作出推导:循环条件中有变量,当变量等于某个值,表达式值为false,退出循环

while的几种应用

        有时候编码内容文字不好表达,简单给个概念,用实际代码来说明.

        1>while遍历字符串

/*while遍历字符串*/char p[] = "hello";char* pt = p;int n = 1;while (*pt) {cout << "第"<<n<<"个字符为:" << *pt << endl;pt++;n++;}

        C++中如果写 char *pt="hello",编译通不过.在C语言中应该可以.C语言中字符串本质上字符数组,C++中常用string对象表达字符串,string对象实现了begin(),end()等接口函数,被看作"字符容器"

        上面代码中用到了"字符串末尾是空字符''\0"这个特点,当遍历到字符串末尾时,while判定为false,跳出循环.

        2>while遍历容器

/*while遍历容器*/list<int> li;li.push_back(1);li.push_back(2);li.push_back(3);auto lip = li.begin();while (lip!=li.end()) {cout << *lip << endl;lip++;}

         上面代码常用for来写,用到了"迭代器变量(lip)从begin()开始,直到超尾迭代器end()结束,中间的迭代器变量指向容器元素"这个特点.

        3>while和cin(输入流)相结合

        下面代码用输入字符控制while的循环退出 

	char ar;int b=0;while (cin >> ar && ar != 'q') {    //输入除空白字符(空格,回车,tab)以外的字符,q退出cout << "你输入的字符是:" << ar << endl;b++;}cout << "b的值是:" <<b<< endl;

        上面代码中cin>>ar表达式,他的返回值也是bool类型.成功输入返回true,否则返回false.

        代码表示:只要不输入q,其他输入进去的字符被显示出来;此外声明的变量b表示输入次数.

        cin有个特点:缓冲流中的空白字符不被识别,比如输入"   3",识别为3,前面的空白字符被丢弃.但cin.get()和cin.getline()会识别空白字符.具体情况可以上网搜索.

        下面代码用输入格式控制while的循环退出         

	    double x, y;cout << "输入两个double型数字:" << endl;while (cin >> x >> y) {					//输入两个值cout << "输入两个值加起来是:" << x + y << endl;cout << "格式:数字+空格+数字+空格,其他字母退出" << endl;}

         上面代码实现两个double类型值相加,输入"2 3",计算出5;当输入"t t"等不符合格式时,退出循环

//使输入值在范围内
int number;
while(!(cin>>number && number>=1 && number<=6)){    //当输入不符合要求时cin.clear();                                    //重置输入while(cin.get()!='\n');                         //清除多余输入cout<<"请输入1到6之间的整数(含1和6)"<<endl;
}
.....
//跳出循环后number值在正确范围内(1~6)

        上面代码表示必须输入1~6内的一个整数,才可以跳出循环 

        下面是一个嵌套的while        

/*用输入作为while的循环条件的写法*/double x, y;cout << "输入任意字符继续,按t退出" << endl;while (cin >> ar && ar != 'q') {		//输入选择cout << "你还在循环中:"  << endl;cout << "输入两个double型数字:" << endl;while (cin >> x >> y) {					//输入两个值cout << "输入两个值加起来是:" << x + y << endl;cout << "按其他键退出" << endl;}									cin.clear();						//注意:一定要用clear,否则直接退出!while(cin.get()!='\n');				//注意:这句和上一句一起用,网上说的cin.syc()不行!cout << "输入任意字符继续,按t退出" << endl;}

         上面代码有个需要注意的地方,从cin从while中跳出来,要将缓冲区做处理,把缓冲区中直到回车符前的部分全部吸收,或者沿用书上叫法-丢弃.不让他影响到下一次的输入.

		cin.clear();						while(cin.get()!='\n');				

        这部分相当于C语言中的

int ch;
while((ch=getchar())!='\n');

          4>while和比较表达式结合

        假设现在有两个数组,一个数组有n个值,另一个数组有n+2个值.把一个数组内的值复制到另一个数组当中.----当然这个例子不是太典型,一般用for来完成.

int a[3]={1,2,3};
int length=sizeof(a)/sizeof(int);
int b[length+2];
int num=0;                            //记录元素个数
while(num<length){                    //数组之间传递值b[num]=a[num];num++;
}

小结

        while条件必须是返回值为bool类型的表达式,可用到的表达式有:比较表达式,逻辑表达式,输入表达式cin.表达式里用变量来编写程序员需要的逻辑,逻辑闭环问题解决.

        思路:while→表达式→变量→逻辑

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com