C++输入输出

本文介绍了C++的控制台I/O系统。C++除支持C语言输入输出系统外,还定义了面向对象的输入输出系统,可解决C语言无法处理自定义对象的问题。文中分别阐述了基于函数库和类库的控制台I/O,包括输出、输入函数及预定义对象等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言:

C++除了完全支持C 语言的输入输出系统外,还定义了一套面向对象的输入输出系统。为什么C ++还要建立自己的输入输出系统。
原因在于C 语言的输入输出系统不支持用户自定义的对象。
例一:

struct complex{
     int x;
     int y;
}my_cpmplex; 
printf("%struct",my_complex);

对此结构类型,在C语言中下面的语句是不能接受的。

因为printf( )函数只能识别系统预定义的类型,而没有办法对新的数据类型进行扩充.。用C++的输入输出系统,就可以通过重载“<<”和“>>”运算符来解以上问题。 C++的类机制允它建立一个可扩展的输入输出系统,它可以通过修改和扩展来加入用户自定义类型及相应操作。
例二:

#include<iostream>
using namespace std;
class complex{
       int x;
       int y;
    public:
       complex(){
          x=1;
          y=1;
       }
       friend ostream& operator << (ostream& out ,const complex &com){
             cout<<com.x<<","<<com.y;
             return out;
        }
}; 
int main(void){
     complex my_complex;
     cout<<my_complex;
      
      return 0;
}

基于函数库的控制台I/O

基于函数库的控制台输入/输出是C语言标准库的功能,C++保留了这些功能

1、输出

在C++的标准函数库中提供了下面的控制台输出函数(在头文件cstdio或stdio.h中声明)
1、printf( )函数

格式字符类型输出格式
%cchar以字符型输出,输出一个字符
%d,iint以有符号的十进制输出
%ldlong [int]以长整型输出
%hdshort [int]短整型
%ounsigned int以无符号八进制输出
%uunsigned int以无符号十进制输出
%xunsigned int以无符号十六进制(abcdef)输出
%Xunsigned int以无符号十六进制(ABCDEF)输出
%edouble以指数形式输出,指数用’e’表示
%Edouble以指数形式输出,指数用’E’表示
%lfdouble以双精度小数形式输出
%ffloat以单精度小数形式输出
%schar *输出字符串
%%%

2、putchar( )函数
输出字符
3、puts( )函数
输出字符串

2、输入

1、scan( )函数
同printf( )函数

基于类库的控制台I/O

1、预定义的控制台对象

在I/O类库中预定义了4个I/O对象:cin、cout、cerr、clog

2、输出

任何基本数据类型的数据和指针都可以通过cout、cerr、clog对象和插入操作符"<<" 进行输出。

#include<iostream>
using namespace std;
int main(void){
   int x=1;
   char ch='a';
   float f=1.2433;
   int *p=&x;
   cout<<x;
   cout<<ch;
   cout<<f;
   cout<<p;
   return 0;
  }

注意:
对于指针的输出有一个特例,即输出指向字符串的指针时,并不输出字符串的首地址,而是输出字符串。

#include<iostream>
using namespace std;
int main(void){
   const char *p="abcd";
   cout<<p;//输出abcd
   cout<<(void *)p;//输出p的值
}

C++ 中常用的输出流操纵算子(也叫格式控制符)。它们都是在头文件 iomanip 中定义的。要使用这些流操纵算子,必须包含该头文件。

流操纵算子作用
*dec以十进制形式输出整数
hex以十六进制形式输出整数
oct以八进制形式输出整数
fixed以普通小数形式输出浮点数
scientific以科学计数法形式输出浮点数
left左对齐,即在宽度不足时将填充字符添加到右边
*right右对齐,即在宽度不足时将填充字符添加到左边
setbase(b)设置输出整数时的进制,b=8、10 或 16
setw(w)指定输出宽度为 w 个字符,或输人字符串时读入 w 个字符
setfill( c )在指定输出宽度的情况下,输出的宽度不足时用字符 c 填充(默认情况是用空格填充)
setprecision(n)设置输出浮点数的精度为 n。
setiosflags (标志)将某个输出格式标志置为 1
resetiosflags(标志)将某个输出格式标志置为 0
boolapha把 true 和 false 输出为字符串
*noboolalpha把 true 和 false 输出为 0、1
showbase输出表示数值的进制的前缀
*noshowpoint只有当小数部分存在时才显示小数点
showpos在非负数值中显示 +
*noshowpos在非负数值中不显示 +
*skipws输入时跳过空白字符
noskipws输入时不跳过空白字符
uppercase十六进制数中使用 A~E。若输出前缀,则前缀输出 0X,科学计数法中输出 E
*nouppercase十六进制数中使用 a~e。若输出前缀,则前缀输出 0x,科学计数法中输出 e。
internal数值的符号(正负号)在指定宽度内左对齐,数值右对 齐,中间由填充字符填充

说明:
“流操纵算子”栏中的星号*不是算子的一部分,星号表示在没有使用任何算子的情况下,就等效于使用了该算子。例如,在默认情况下,整数是用十进制形式输出的,等效于使用了 dec 算子。
使用这些算子的方法是将算子用<<和 cout 连用。
例二:

#include<iostream>
#include<iomanip>
using namespace std;
int main(void){
  cout<<hex<<18<<endl;
  cout<<oct<<10<<endl;
  cout<<fixed<<10.123<<endl;
  cout<<scientific<<10.12345<<endl;
  cout<<left<<set(10)<<100<<endl;
  cout<<setfill('+')<<setw(10)<<100<<endl;
  
  return 0;
  }

输出结果

12
12
10.123000
1.012345e+001
144
144+++++++
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值