佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

123
返回列表 发新帖

关于looping的问题

  [复制链接]
发表于 31-10-2011 09:32 PM | 显示全部楼层
回复 40# 可爱的医师小小

  1. #include <iostream>
  2. using namespace std;
  3. /* Task C */
  4. int main()
  5. {
  6.         char x;
  7.         cout << "This program will determine is that the";
  8.         cout <<" alphabet input is vowel.\n";
  9.         do
  10.         {
  11.                 cout << "\nPlease enter an alphabet.\nEnter 'z'to exit.\n";
  12.                 cin >> x;
  13.                 if(  x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u'||
  14.                          x == 'A' || x == 'E' || x == 'I' || x == 'O' || x == 'U')
  15.                 {
  16.                         cout << "Character is a VOWEL.\n";
  17.                 }
  18.                 else if(  x != 'a' || x != 'e' || x != 'i' || x != 'o' || x != 'u' ) // 多餘
  19.                 {
  20.                         cout << "Character entered is " << x <<"\n";
  21.                 }
  22.         
  23.         }while ( x != 'z' && x != 'Z');
  24.         return 0;
  25. }
  26.         
  27.         
复制代码


沒什麼大問題 ,只是這個 if( x != 'a' || x != 'e' || x != 'i' || x != 'o' || x != 'u' ) 多餘的,因為你一開始已經判斷了,所以不需要這一行也可以。還有你的 do while, 你的while 可以放在bracket 後面嗎 =.= ? 我看的時候還以為你多一個 while loop
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 31-10-2011 09:54 PM | 显示全部楼层
回复  可爱的医师小小



沒什麼大問題 ,只是這個 if( x != 'a' || x != 'e' || x != 'i' || x != 'o ...
invisible 发表于 31-10-2011 09:32 PM
好的,谢谢你!
回复

使用道具 举报

发表于 31-10-2011 11:18 PM | 显示全部楼层
本帖最后由 geekman 于 31-10-2011 11:39 PM 编辑

你可以通过toupper()或者tolower()来减少你的if()的evaluation次数:

  1. x = toupper(x);
  2. if(x == 'A' || x == 'E' || x == 'I' || x == 'O' || x == 'U')
  3. {
  4.     //do whatever
  5. }
复制代码
或者

  1. x = tolower(x);
  2. if(x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u')
  3. {
  4.     //do whatever
  5. }
复制代码
  1. while ( x != 'z' && x != 'Z');
复制代码
你确定是 && ?如果你的意图是让使用者按 Z 键来结束while loop,那你得到的结果将是完全相反的。不管使用者按什么键都会break loop的,因为你的条件是x必须同时不是大写和小写的 Z 才会继续 (反过来说,就是你的条件是x必须同时为大写和小写的 Z,或者 x 是 Z,z 以外的任何字母/符号都会停止循环)。

还有,用switch会更简洁,因为你不必evaluate else if():
  1. x = tolower(x);
  2. switch(x)
  3. {
  4.     case 'a':
  5.     case 'e':
  6.     case 'i':
  7.     case 'o':
  8.     case 'u': //it's a vowel
  9.             break;
  10.     default: //it isn't
  11. }
复制代码
回复

使用道具 举报

 楼主| 发表于 31-10-2011 11:30 PM | 显示全部楼层
你可以通过toupper()或者tolower()来减少你的if()的evaluation次数:或者你确定是 && ?如果你的意图 ...
geekman 发表于 31-10-2011 11:18 PM

又学到东西了,谢谢大大
回复

使用道具 举报

 楼主| 发表于 31-10-2011 11:39 PM | 显示全部楼层
你可以通过toupper()或者tolower()来减少你的if()的evaluation次数:或者你确定是 && ?如果你的意图 ...
geekman 发表于 31-10-2011 11:18 PM
是哦,我测试了,行得通哦
回复

使用道具 举报

 楼主| 发表于 31-10-2011 11:48 PM | 显示全部楼层
本帖最后由 可爱的医师小小 于 31-10-2011 11:51 PM 编辑
你可以通过toupper()或者tolower()来减少你的if()的evaluation次数:或者你确定是 && ?如果你的意图 ...
geekman 发表于 31-10-2011 11:18 PM
其实那个&&的是我从我老师的例子参考来的,不是很明白。
  1. while ( x != 'Z' || x != 'z');
复制代码
  1. while ( x == 'z' && x == 'Z');
复制代码

如果是这样的话就行不通……
回复

使用道具 举报

Follow Us
发表于 31-10-2011 11:53 PM | 显示全部楼层
while(condition1 && condition2)
=> while condition1 AND condition2 is true, loop goes on,也就是说两个条件都必须是true才会继续

while(condition1 || condition2)
=> while condition1 OR condition2 is true, loop goes on,也就是说任何一个条件是true都会继续。

其实最好的做法就是我给你的方案:用tolower()或者toupper(),然后只需要evaluate一个condition:

  1. x = tolower(x);
  2. do
  3. {
  4.     //whatever
  5. }(while x != 'z');
复制代码
简单明了。
回复

使用道具 举报

发表于 31-10-2011 11:55 PM | 显示全部楼层
回复 46# 可爱的医师小小

行不通的原因是x不可能同时是大写和小写的 Z
回复

使用道具 举报


ADVERTISEMENT

发表于 8-10-2012 09:54 PM | 显示全部楼层
你要Return出来嘛~,哈哈~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 24-11-2025 02:00 PM , Processed in 0.139263 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表