while循环无法退出的问题

C语言 码拜 6年前 (2015-05-11) 304次浏览 0个评论
 

我在学到<<C++大学教程>>第二章 控制结构时,在2.16 switch 多项选择结构(P69)小节,其中有一道例题(用switch计算学生考试的每一级人数),编译通过也可以运行,但无法退出while循环,源程序是:

我在学到<<C++大学教程>>第二章 控制结构时,在2.16 switch 多项选择结构(P69)小节,其中有一道例题(用switch计算学生考试的每一级人数),编译通过也可以运行,但无法退出while循环,源程序是:

// Fig. 2.22: fig02_22.cpp
// Counting letter grades 
#include < iostream >
using namespace std;

int main ( )
{
int grade,       // one grade
aCount = 0,  // number of A””s 
bCount = 0,  // number of B””s
cCount = 0,  // number of C””s
dCount = 0,  // number of D””s
fCount = 0;  // number of F””s

cout << “Enter the letter grades.” << endl   
<< “Enter the EOF character to end input.” << endl;   // 输入EOF评分结束

while ( ( grade = cin.get () ) != EOF ) {

switch ( grade ) {           // switch nested in while ( while中嵌套switch )

case “”A””:   // grade was uppercase A ( 等级是大写字母A )
case “”a””:   // or lowercase a ( 或小写字母a )
++aCount;
break;  // necessary to exit switch 

case “”B””:   // grade was uppercase B
case “”b””:   // or lowercase b
++bCount;
break;

case “”C””:   // grade was uppercase C
case “”c””:   // or lowercase c
++cCount;
break;

case “”D””:   // grade was uppercase D
case “”d””:   // or lowercase d
++dCount;
break;

case “”F””:   // grade was uppercase F
case “”f””:   // or lowercase f
++fCount;
break;

case “”\n””:  // ignore newlines, 
case “”\t””:  // tabs, 
case “” “”:   // and spaces in input 
break;

default:    // catch all other characters
cout << “Incorrect letter grade entered.”   // 不正确的字母输入
<< ” Enter a new grade.” << endl;       // 重新输入
break;   // optional 
}
}

cout << “\n\nTotals for each letter grade are:”     // 每个字母等级的总数是
<< “\nA: ” << aCount
<< “\nB: ” << bCount
<< “\nC: ” << cCount
<< “\nD: ” << dCount
<< “\nF: ” << fCount << endl;
return 0;
}

while ( ( grade = cin.get () ) != EOF )语句表示输入EOF退出while结构,但在执行时没有用,书上说EOF是<iostream.h>头文件中定义的符号化整型常量,与系统有关,不知道是不是这个问题,我用的是WinME.

^Z or F6
EOF好象多用于文件流的结束标记,你可以用其它字符嘛:)
至于在命令提示符下结束,你试试Ctrl+Z
用ctrl+z(dos)
10分
#include<iostream.h  >  
#include<fstream.h>  
//using  namespace  std;
  ifstream in(“grade.txt”);
  int  main  (  )
  {
    int  grade,              //  one  grade
      aCount  =  0,    //  number  of  A””s  
      bCount  =  0,    //  number  of  B””s
      cCount  =  0,    //  number  of  C””s
      dCount  =  0,    //  number  of  D””s
      fCount  =  0;    //  number  of  F””s
    
    cout  <<    “Enter  the  letter  grades.”  << endl      
      <<    “Enter  the  EOF  character  to  end  input.”  <<    endl;      //  输入EOF评分结束
    
    while  (  (  grade  =  in.get  ()  )  !=  EOF  )  {
      
      switch  (  grade  )  {                      //  switch  nested  in  while  (  while中嵌套switch  )
        
      case  “”A””:      //  grade  was  uppercase  A  (  等级是大写字母A  )
      case  “”a””:      //  or  lowercase  a  (  或小写字母a  )
        ++aCount;
        break;    //  necessary  to  exit  switch  
        
      case  “”B””:      //  grade  was  uppercase  B
      case  “”b””:      //  or  lowercase  b
        ++bCount;
        break;
        
      case  “”C””:      //  grade  was  uppercase  C
      case  “”c””:      //  or  lowercase  c
        ++cCount;
        break;
        
      case  “”D””:      //  grade  was  uppercase  D
      case  “”d””:      //  or  lowercase  d
        ++dCount;
        break;
        
      case  “”F””:      //  grade  was  uppercase  F
      case  “”f””:      //  or  lowercase  f
        ++fCount;
        break;
        
      case  “”\n””:    //  ignore  newlines,  
      case  “”\t””:    //  tabs,  
      case  “”  “”:      //  and  spaces  in  input  
        break;
        
      default:        //  catch  all  other  characters
        cout  <<    “Incorrect  letter  grade  entered.”      //  不正确的字母输入
          <<    ”  Enter  a  new  grade.”  <<    endl;              //  重新输入
        break;      //  optional  
      }
    }
    
    cout  <<    “\n\nTotals  for  each  letter  grade  are:”          //  每个字母等级的总数是
      <<    “\nA:  ”  <<    aCount
      <<    “\nB:  ”  <<    bCount
      <<    “\nC:  ”  <<    cCount
      <<    “\nD:  ”  <<    dCount
      <<    “\nF:  ”  <<    fCount  <<    endl;
    return  0;
  }
这样不是可以了吗??
应该是Ctrl+z或F6。如果你在dos下用过copy con就会知道了。
倒是可以退出了,不过评分无法输入了。
另外#include<  fstream.h> 和 ifstream  in(“grade.txt”);
是啥意思?    
10分
#include<fstream.h>时针对于文件的IO流
  ifstream    in(“grade.txt”);
是将grade.txt作为输入文件,in指向该文件头。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明while循环无法退出的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!