15.1.4 流式输入(1)

2013-10-07 15:35:17 · 作者: · 浏览: 65

15.1.4  流式输入(1)

输入流为结构化数据和非结构化数据的读入提供了简单方法。本节以cin为例讨论了输入技术,cin即控制台输入流。

1. 输入基本概念

通过输入流,可以采用两种简单方法来读取数据。第一种方法类似于<<运算符,向输出流输出数据。读入数据对应的运算符是>>。通过>>从输入流读入数据的时候,通过代码中提供的变量保存接受的值。例如,以下程序从用户那里读入一个单词,并将这个单词保存在一个字符串中。然后这个字符串又被输出到控制台:

  1. string userInput;  
  2. cin >> userInput;  
  3. cout << "User input was " << userInput << endl;  
  4.  
  5. 代码取自Input\string.cpp  

默认情况下,>>运算符根据空白符对输入值标志化。例如,如果一个用户运行以上程序并且键入hello there作为输入,那么只有第一个空白字符(在这个例子中为空格符)之前的字符才会被捕捉在userInput变量中。输出如下所示:
  1. User input was hello 

在输入中包含空白字符的一种方法是使用get(),本章后面会讨论这个方法。

>>运算符可以用于不同的变量类型,就像<<运算符一样。例如,如果要读取一个整数,那么只有变量类型的区别:

  1. int userInput;  
  2. cin >> userInput;  
  3. cout << "User input was " << userInput << endl;  
  4.  
  5. 代码取自Input\int.cpp  

通过输入流可以读入多个值,而且可以根据需要混合和匹配类型。例如,下面这个函数摘选自一个餐馆预订系统,这个函数要求用户输入姓以及聚会就餐的人数:
  1. void getReservationData()  
  2. {  
  3. string guestName;  
  4. int partySize;  
  5. cout << "Name and number of guests: ";  
  6. cin >> guestName >> partySize;  
  7. cout << "Thank you, " << guestName << "." << endl;  
  8. if (partySize > 10) {  
  9. cout << "An extra gratuity will apply." << endl;  
  10. }  
  11. }  
  12.  
  13. 代码取自Input\getReservationData.cpp  

注意,>>运算符会根据空白字符符号化,因此getReservationData()函数不允许输入带有空白字符的姓名。一个解决方法是使用本章后面讲解的unget()方法。注意,尽管这里使用cout的时候没有通过endl或flush()显式地刷新缓存区,但是仍然可以将文本写入控制台,因为这里使用的cin立即刷新了cout缓存区;cin和cout通过这种方式连接在一起。

如果分不清<<和>>的作用,只要联想箭头的方向指向它们的目标即可。在输出流中,<<指向流本身,因为数据被发送至流。在输入流中,>>指向变量,因为数据被保存。