使用流进行特定格式的输入输出

使用流进行输入输出

常用的流控制符

使用std::cout将指定格式的数据写入控制台

// 使用流进行输入输出.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。  
//  
  
#include <iostream>  
#include <iomanip>  
using namespace std;  
  
int main()  
{  
    // 指定数据输出格式  
    double var1 = 3.1415926;  
    cout << fixed << var1 << endl; // 将默认输出方式设置为定点方式显示  
    cout << scientific << var1 << endl; // 将默认输出方式设置为以科学计数法的方式标准  
    int var2 = 36;  
    cout << hex << var2 << endl; //将默认输出方式设置为以十六进制的方式显示,但是不同于iomanip中的hex显示,这里仅仅可以正常显示整型变量  
    cout << hex << (float)var2 << endl;  
  
    // ios_base::showbase:显示底数,例如0x(16进制)  
    // ios_base::uppercase:字母大写显示  
    // ios_base::hex:16进制显示  
    cout << setiosflags(ios_base::hex | ios_base::showbase | ios_base::uppercase); // 设置输出模式  
    cout << var2 << endl;  
    cout << resetiosflags(ios_base::hex | ios_base::showbase | ios_base::uppercase); // 将这些输出的规定取消  
    cout << var2 << endl;  
    cout << setprecision(5) << var1 << endl; // 将默认输出方式设置为设置精度为5(小数部分为5位)  
}  

 

使用std::cout对齐文本和设置字段宽度

// 使用流进行输入输出.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。  
//  
  
#include <iostream>  
#include <iomanip>  
using namespace std;  
  
int main()  
{  
    // 指定数据输出格式  
    double var1 = 3.1415926;  
    cout << fixed << var1 << endl; // 将默认输出方式设置为定点方式显示  
    cout << scientific << var1 << endl; // 将默认输出方式设置为以科学计数法的方式标准  
    int var2 = 36;  
    cout << hex << var2 << endl; //将默认输出方式设置为以十六进制的方式显示,但是不同于iomanip中的hex显示,这里仅仅可以正常显示整型变量  
    cout << hex << (float)var2 << endl;  
  
    // ios_base::showbase:显示底数,例如0x(16进制)  
    // ios_base::uppercase:字母大写显示  
    // ios_base::hex:16进制显示  
    cout << setiosflags(ios_base::hex | ios_base::showbase | ios_base::uppercase); // 设置输出模式  
    cout << var2 << endl;  
    cout << resetiosflags(ios_base::hex | ios_base::showbase | ios_base::uppercase); // 将这些输出的规定取消  
    cout << var2 << endl;  
    cout << setprecision(5) << var1 << endl; // 将默认输出方式设置为设置精度为5(小数部分为5位)  
  
    // 设置数据的输出排列方式  
    cout << setw(10) << setfill('*');  
    cout << var2 << endl; // 默认右对齐  
    cout << setw(10) << setfill('*');  
    cout << setiosflags(ios_base::left); // 设置左对齐  
    cout << var2 << endl;  
    cout << setw(10) << setfill('*');  
    cout << setiosflags(ios_base::right); // 设置右对齐  
    cout << var2 << endl;  
}  

 

Getline的使用方法

#include <iostream>  
#include <iomanip>  
#include <string>  
using namespace std;  
  
int main()  
{  
        // 数据的读取  
    char name[8] = { 0 };  
    cin >> name;  
    cout << name << endl;  
  
    string mark;  
    getline(cin, mark, '8'); // 从缓存区的初始位置读取到这一行的'8'结束  
    if (mark == "\0")  
    {  
        cout << "缓存区读取失败" << endl;  
    }  
    cout << mark << endl;  
}  

 

Cin.getine()与getline()的区别

定义的区别

Getline(istream对象,string类型的InputVar,读取结束的字符)

Cin.getline(数组类型的InputVar,读取的字符个数(包含’\0’))

操作的区别

Getline()非常好用,但是所有读取的元素必须在一行之内,也就是说,你读取的缓存区不允许有换行符’\n’;cin.getline()就不太好用了,假设我要读取8个字符放入name字符数组中,cin.getline()会在第8个字符位置插入’\0’,因此我们仅仅可以读取前7个字符将其赋值给name字符数组,最终name字符数组中只有7个有效元素。

安全性的区别

虽然cin.getline()有些不好用,但是我觉得它很安全,因为在第七个元素后面插入了’\0’读取结束标志,因此你们无论输入多少个元素,cin.getline()只会读取前7个元素,不会造成内存问题。

所属位置的区别

Geline()

string类中成员函数

Cin.getline()

istream类中的成员函数

Cin.getine()用法

#include <iostream>  
#include <iomanip>  
#include <string>  
using namespace std;  
  
int main()  
{  
    // 数据的读取  
    char name[8] = { 0 };  
    cin.getline(name, 8); // 读取前7个字符与最后一个结束字符'\0'构成8个字符但是只将前7个字符赋给name,'\0'留在缓存区内  
    cout << name << endl;  
    cin.clear(); // 清空开头到'\0'的输入缓存区  
  
    string mark;  
    getline(cin, mark, '8'); // 从缓存区的初始位置读取到这一行的'8'结束  
    if (mark == "\0")  
    {  
        cout << "缓存区读取失败" << endl;  
    }  
    cout << mark << endl;  
  
    getline(cin, mark, '8'); // 从缓存区的初始位置读取到这一行的'8'结束  
    if (mark == "\0")  
    {  
        cout << "缓存区读取失败" << endl;  
    }  
    cout << mark << endl;  
}  

 

注意:一定要加上“cin.clear(); // 清空开头到'\0'的输入缓存区”,只有这样才可以清除缓存区开头的’\0’读取结束符。

Getline()的优点

Getline()在读取结束完成后,不会向缓冲区内植入任何符号,而且可以连续读取缓存区内的内容。

#include <iostream>  
#include <iomanip>  
#include <string>  
using namespace std;  
  
int main()  
{  
    string mark;  
    getline(cin, mark, '8'); // 从缓存区的初始位置读取到这一行的'8'结束  
    if (mark == "\0")  
    {  
        cout << "缓存区读取失败" << endl;  
    }  
    cout << mark << endl;  
  
    getline(cin, mark, '8'); // 从缓存区的初始位置读取到这一行的'8'结束  
    if (mark == "\0")  
    {  
        cout << "缓存区读取失败" << endl;  
    }  
    cout << mark << endl;  
}  

 

Cin.get()函数的用法

#include <iostream>  
#include <iomanip>  
#include <string>  
using namespace std;  
  
int main()  
{  
    char weight[10] = { 0 };  
    cin.get(weight, 8); // 在缓冲区内读取7个字符与'\0'一起插入weight中  
    cout << weight << endl;  
    cin.get(weight, 8); // 在缓冲区内读取7个字符与'\0'一起插入weight中   
    cout << weight << endl;  
}  

 

我们可以将cin.get()与cin.getline()作比较,都是读取的n-1个数据,只不过’\0’这个元素插入位置不同,cin.get()是将’\0’插入变量中而cin.getline()是将’\0’元素插入缓冲区内,因此两者不同。

Cin.get()与cin.getline()用法的区别

读取格式不同

cin.getline( )确保您捕获用户输入的整行,包括空白在内;cin.get( )则不可以包含空白。

读取方式不同

Cin.getline(数组类型的InputVar,读取的字符个数(包含’\0’))

cin.get(istream对象,读取字符个数 )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肥肥胖胖是太阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值