C++编程中用put输出单个字符和cin输入流的用法

用C++流成员函数put输出单个字符
在程序中一般用cout和插入运算符“<<”实现输出,cout流在内存中有相应的缓冲区。有时用户还有特殊的输出要求,例如只输出一个字符。ostream类除了提供上面介绍过的用于格式控制的成员函数外,还提供了专用于输出单个字符的成员函数put。如:

  cout.put('a');

调用该函数的结果是在屏幕上显示一个字符a。put函数的参数可以是字符或字符的ASCII代码(也可以是一个整型表达式)。如

  cout.put(65 + 32);

也显示字符a,因为97是字符a的ASCII代码。

可以在一个语句中连续调用put函数。如:

  cout.put(71).put(79).put(79). put(68).put('\n');

在屏幕上显示GOOD。

[例] 有一个字符串"BASIC",要求把它们按相反的顺序输出。

#include <iostream>
using namespace std;
int main( )
{
  char *a="BASIC";//字符指针指向'B'
  for(int i=4;i>=0;i--)
   cout.put(*(a+i));         //从最后一个字符开始输出
  cout.put('\n');
  return 0;
}

运行时在屏幕上输出:

CISAB

除了使用cout.put函数输出一个字符外,还可以用putchar函数输出一个字符。putchar函数是C语言中使用的,在stdio.h头文件中定义。C++保留了这个函数,在iostream头文件中定义。

[例] 也可以改用putchar函数实现。

#include <iostream> //也可以用#include <stdio.h>,同时不要下一行
using namespace std;
int main( )
{
  char *a="BASIC";
  for(int i=4;i>=0;i--)
   putchar(*(a+i));
  putchar('\n');
}

运行结果与前相同。

成员函数put不仅可以用cout流对象来调用,而且也可以用ostream类的其他流对象调用。

C++ cin输入流详解
标准输入流是从标准输入设备(键盘)流向程序的数据。在头文件iostream.h中定义了cin、cout、cerr、clog 4个流对象(详情请查看:与C++输入输出有关的类和对象),cin是输入流,cout、cerr、clog是输出流。

cin是istream类的对象,它从标准输入设备(键盘)获取数据,程序中的变量通过流提取符“>>”从流中提取数据。流提取符“>>”从流中提取数据时通常跳过输入流中的空格、tab键、换行符等空白字符。

注意:只有在输入完数据再按回车键后,该行数据才被送入键盘缓冲区,形成输入流,提取运算符“>>”才能从中提取数据。需要注意保证从流中读取数据能正常进行。

例如:

  int a,b;
  cin>>a>>b;

若从键盘上输入

  21 abc

变量a从输入流中提取整数21,提取操作成功,此时cin流处于正常状态。但在变量b准备提取一个整数时,遇到了字母a,显然提取操作失败了,此时,cin流被置为出错状态。只有在正常状态时,才能从输入流中提取数据。

当遇到无效字符或遇到文件结束符(不是换行符,是文件中的数据已读完)时,输入流cin就处于出错状态,即无法正常提取数据。此时对cin流的所有提取操作将终止。在 IBM PC及其兼容机中,以Ctrl + Z表示文件结束符。在UNIX和Macintosh系统中,以 Ctrl + D表示文件结束符。当输入流cin处于出错状态时,如果测试cin的值,可以发现它的值为false(假),即cin为0值。如果输入流在正常状态,cin的值为true(真),即cin为 一个非0值。可以通过测试cin的值,判断流对象是否处于正常状态和提取操作是否成功。如:

  if(!cn) //流cin处于出销状态,无法正常提取数据
    cout<<"error";

[例] 通过测试cin的真值,判断流对象是否处于正常状态。

#include <iostream>
using namespace std;
int main( )
{
  float grade;
  cout<<"enter grade:";
  while(cin>>grade)//能从cin流读取数据
  {
   if(grade>=85) cout<<grade<<"GOOD!"<<endl;
   if(grade<60) cout<<grade<<"fail!"<<endl;
   cout<<"enter grade:";
  }
  cout<<"The end."<<endl;
  return 0;
}

流提取符“>>”不断地从流中提取数据(每次提取一个浮点数),如果成功,就陚给 grade,此时cin为真,若不成功则cin为假。如果键入文件结束符,表示数据已完。

运行情况如下:

enter grade: 67
enter grade: 89
89 GOOD!
enter grade: 56
56 fail!
enter grade: 100
100 GOOD!
enter grade: ^Z//键入文件结束符
The end.

在遇到文件结束符时,程序结束。如果某次输入的数据为

  enter grade: 100/2

流提取符">>"提取100,赋给grade,进行if语句的处理。然后再遇到"/",认为是无效字符,cin返回0。循环结束,输出"The end."。

在不同的C++系统下运行此程序,在最后的处理上有些不同。以上是在GCC环境下运行程序的结果,如果在VC++环境(笔者使用win7系统)下运行此程序,在键入Ctrl + Z 时,需要敲击两次回车,程序才输出"The end."。

(0)

相关推荐

  • c++中cin/cout与scanf/printf的区别比较

    cin .cout 基本说明: cin代表标准输入设备,使用提取运算符 ">>" 从设备键盘取得数据,送到输入流对象cin中,然后送到内存. cin是输入流,cout是输出流,重载了">>"."<<"运算符,包含在头文件<iostream>中. 先把要输出的东西存入缓冲区,再输出,导致效率降低,cin是自动判断你的变量类型,比如一个char数据只能用默认的char方法取数据. scanf .prin

  • 解析C++中的字符串处理函数和指针

    C++字符串处理函数 字符串连接函数 strcat 其函数原型为 strcat(char[],const char[]); strcat是string catenate(字符串连接)的缩写.该函数有两个字符数组的参数,函数的作用是:将第二个字符数组中的字符串连接到前面字符数组的字符串的后面.第二个字符数组被指定为const,以保证该数组中的内容不会在函数调用期间修改.连接后的字符串放在第一个字符数组中,函数调用后得到的函数值,就是第一个字符数组的地址.例如: char str1[30]=″Peo

  • C,C++中常用的操作字符串的函数

    小小的做一个总结 函数名: stpcpy 功 能: 拷贝一个字符串到另一个,遇到'\0'时停止拷贝,destin要有足够大的空间 用 法: char *stpcpy(char *destin, char *source);   函数名: strcat 功 能: 字符串拼接函数,注意,destin要有足够大的空间 用 法: char *strcat(char *destin, char *source); 函数名: strchr 功 能: 在一个串中查找给定字符的第一个匹配之处,找不到返回NULL

  • C/C++字符串查找函数全面了解

    C/C++ string库(string.h)提供了几个字符串查找函数,如下: memchr 在指定内存里定位给定字符 strchr 在指定字符串里定位给定字符 strcspn 返回在字符串str1里找到字符串str2里的任意一个字符之前已查找的字符数量 strrchr 在字符串里定位给定字符最后一次出现的位置 strpbrk 在字符串str1里定位字符串str2里任意一个首次出现的字符 strspn 返回字符串str1从开始字符到第一个不在str2中的字符个数 strstr 在字符串str1中

  • C++处理键盘输入的方法

    本文实例讲述了C++处理键盘输入的方法,可实现简单处理键盘输入,分享给大家供大家参考.具体实现方法如下: 需要响应WM_CHAR消息: 复制代码 代码如下: #include <string> static std::string str; 在wm_char中: 复制代码 代码如下: str = str + char(wParam);  ::InvalidateRect(hWnd, NULL, 0);  return 0; 在wm_paint中: 复制代码 代码如下: case WM_PAIN

  • 浅谈c++中的while(cin)问题

    xp系统中利用dev-cpp进行编程,语句while(cin>>str),str是个string类型,在一行中输入几个string,末位加个ctrl+z,输入没有结束,除非出入换行后,再输入ctrl+z才能跳出输入.一直不明白未什么,解释请看下. 输入缓冲是行缓冲.当从键盘上输入一串字符并按回车后,这些字符会首先被送到输入缓冲区中存储.每当按下回车键后,cin.get()   就会检测输入缓冲区中是否有了可读的数据.cin.get()   还会对键盘上是否有作为流结束标志的   Ctrl+Z 

  • c++ cin 作为while条件(详解)

    本文一切测试在windows clion中进行 在clion中,ctrl +z并不是文件结束符 在cmd中运行,只需要ctrl+z再加回车就可以得到正确结果 1.cin cin是C++编程语言中的标准输入流对象,即istream类的对象.cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘.此外,cout是流的对象,即ostream类的对象,cerr是标准错误输出流的对象,也是ostream 类的对象.这里的标准输出指的是终端键盘,标准错误输出指的是终端的屏幕. 在理解cin功能时

  • C/C++字符串函数之复制函数详解

    突然发现对字符串函数缺乏系统的了解,所以花了一点时间专门整理下,在此记录之,以方便自己及有需要的人使用. C/C++字符串函数的头文件:string.h 复制函数主要有4个,如下: 1.char * strcpy(char* destination,const char * source); 2.char* strncpy(char* destination,const char* source,size_t num); 3.void * memcpy(void* destination,con

  • 基于C++ cin、cin.get()、cin.getline()、getline()、gets()函数的使用详解

    1.cin 2.cin.get() 3.cin.getline() 4.getline() 5.gets() 6.getchar() 附:cin.ignore();  cin.get()//跳过一个字符,例如不想要的回车,空格等字符 1.cin>>          用法1:最基本,也是最常用的用法,输入一个数字: #include <iostream> using namespace std; main () {    int a,b;    cin>>a>&g

  • C++对cin输入字符的判断及分段函数处理方法示例

    本文实例讲述了C++对cin输入字符的判断及分段函数处理方法.分享给大家供大家参考,具体如下: 这两个本来也不是什么问题,然而真正遇到还是有地方可以研究的.首先是C++对于cin输入的判断,有时候你定义了一个整形,然后就是有些人就喜欢给你乱输个字符串进去,你必须处理一下,这里不像Java用抛出异常处理用户输入,也不像JavaScript用isNaN来判断,对此可参考前面的一篇<JavaScript对数字的判断与处理实例分析>.C++是用cin.fail()来判断. 至于分段函数的处理,比如要你

  • C++的字符串分割函数的使用详解

    经常碰到字符串分割的问题,这里总结下,也方便我以后使用. 一.用strtok函数进行字符串分割 原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串. 参数说明:str为要分解的字符串,delim为分隔符字符串. 返回值:从str开头开始的一个个被分割的串.当没有被分割的串时则返回NULL. 其它:strtok函数线程不安全,可以使用strtok_r替代. 示例: //借助strtok实现split #include <st

随机推荐