[源码下载]

不可或缺 Windows Native (13) - C++: 标准输入, 标准输出, 字符串内存流

作者:webabcd

介绍
不可或缺 Windows Native 之 C++

  • 标准输入
  • 标准输出
  • 字符串内存流

示例
1、标准输入, 标准输出
CppIO1.h

#pragma once 

#include <string>

using namespace std;

namespace NativeDll
{
class CppIO1
{
public:
string Demo();
};
}

CppIO1.cpp

/*
* 标准输入,标准输出
*
* 对系统指定的标准设备的输入和输出(即从键盘输入数据,从显示器输出数据),这种输入输出称为标准的输入输出,简称标准 I/O
*/ #include "pch.h"
#include "CppIO1.h" #include <iostream> // 标准输入输出的类
#include <iomanip> // io manipulator using namespace NativeDll; void cppio1_demo1();
void cppio1_demo2();
void cppio1_demo3();
void cppio1_demo4();
void cppio1_demo5(); string CppIO1::Demo()
{
// cin 和 cout 的基本用法
// cppio1_demo1(); // 通过 cout 格式化输出
// cppio1_demo2(); // cout.put(), cin.get(), cin.getline()
// cppio1_demo3(); // cerr, clog
// cppio1_demo4(); // cin.ignore(), cin.putback()
// cppio1_demo5(); return "看代码及注释吧";
} // cin 和 cout 的基本用法
void cppio1_demo1()
{
// cin(console input) - 其是类型为 istream 的对象
// cout(console output) - 其是类型为 ostream 的对象 int a, b;
// 输入
std::cin >> a >> b; // 输出
std::cout << a << b << "\n"; // 遇到"\n"则会把cout缓冲区中的数据输出出来
std::cout << a << b << std::endl; // endl(end of line) - 输出"\n", 然后 flush 缓冲区 std::cout << a;
std::cout.flush(); // 调用 flush 也会把cout缓冲区中的数据输出出来
} // 通过 cout 格式化输出
void cppio1_demo2()
{
int a = ; // 通过格式标志格式化输出
std::cout << std::dec << a << std::endl; // 100 十进制
std::cout << std::hex << a << std::endl; // 64 十六进制
std::cout << std::oct << a << std::endl; // 144 八进制
std::cout << std::showbase << std::uppercase << std::hex << a << std::endl; // 0X64 /*
* 格式标志及说明如下:
*
* left - 输出数据在本域宽范围内向左对齐
* right - 输出数据在本域宽范围内向右对齐
* internal - 数值的符号位在域宽内左对齐,数值右对齐,中间由填充字符填充
* dec - 十进制
* oct - 八进制
* hex - 十六进制
* showbase - 强制输出整数的基数(八进制数以0打头,十六进制数以0x打头)
* showpoint - 强制输出浮点数的小点和尾数0
* uppercase - 在以科学记数法格式E和以十六进制输出字母时以大写表示
* showpos - 对正数显示“+”号
* scientific - 浮点数以科学记数法格式输出
* fixed - 浮点数以定点格式(小数形式)输出
* unitbuf - 每次输出之后刷新所有的流
*/ float b = 123.14159265f;
// 通过 cout 的成员函数或控制符(manipulator)格式化输出
std::cout.width(); // 宽度为 10 个字符(仅对其后的第 1 个输出项有效)
std::cout.precision(); // 从第 1 个非 0 值开始,保留 4 位数字
std::cout << b << b << std::endl; // 123.1123.1
std::cout << std::setw() << b << b << std::endl; // 123.1123.1 std::cout.setf(std::ios::hex | std::ios::showbase | std::ios::uppercase); // 设置指定的格式标志,用“|”分开
std::cout << a << std::endl; // 0X64
std::cout << a << std::endl; // 0X64 std::cout.unsetf(std::ios::showbase | std::ios::uppercase); // 清除指定的格式标志,用“|”分开
std::cout << a << std::endl; // /*
* 第1列是cout的成员函数;第2列是对应的控制符(要使用控制符,则须包含 iomanip 头文件);第3列是对应的说明
* precision(n) setprecision(n) 从第 1 个非 0 值开始,需要输出的位数(四舍五入)
* width(n) setw(n) 输出的宽度(仅对其后的第 1 个输出项有效)
* fill(c) setfill(c) 填充指定宇符
* setf() setiosflags() 设置指定的格式标志
* unsetf() resetioflags() 清除指定的格式标志
*/
} // cout.put(), cin.get(), cin.getline()
void cppio1_demo3()
{
// cout.put()
std::cout.put(); // A
std::cout.put('A'); // A
std::cout << std::endl; // cin.get()
char c[];
// 以下面这句为例,当程序调用 cin.get() 函数时,程序就等着用户按键,用户输入的字符被存放在缓冲区中,直到用户输入'\n'为止('\n'也放在缓冲区中)
// 然后将字符 x 之前的 10-1 个字符赋值给 c,c 的第 10 个字符为字符串的结束标识符'\0'
// x 以及 x 之后的字符仍然保存在缓冲区中
std::cin.get(c, , 'x'); // 还有几个重载,看文档吧
std::cout << c << std::endl;
// 输入:abcxyz\n, c 的值为 abc\0, 缓冲区中的数据为 xyz\n
// 输入:abcdefghijklmnopqrstuvwxyz\n, c 的值为 abcdefghi\0, 缓冲区中的数据为 jklmnopqrstuvwxyz\n // cin.getline()
// 其用法同 cin.get(), 但是 cin.getline() 会自动清除缓冲区中的'\n' // 注意:每次 cin.get()/cin.getline() 的时候,之前的缓冲区中的数据也仍然有效,可以通过如下方法清除输入缓冲区
// std::cin.sync();
} // cerr, clog
void cppio1_demo4()
{
// cout, cerr, clog 都是类型 ostream 的对象
// cerr 是标准错误流,只能输出到显示器。而 cout 除了输出到显示器之外,也可以被重定向输出到磁盘文件等地方
// clog 同 cerr,区别是 cerr 不经过缓冲区,而 clog 需要经过缓冲区(cout 也要经过缓冲区) std::cerr << "abc";
std::clog << "abc" << std::endl;
} // cin.ignore(), cin.putback()
void cppio1_demo5()
{
char c[];
// 跳过输入流中前 n 个字符,或在遇到指定的终止字符时提前结束(此种场景终止字符也会被跳过)
std::cin.ignore(, 'x');
std::cin >> c;
// 输入 abcdefg,则 c 值为 defg\0
// 输入 axmn,则 c 值为 mn\0 char c1;
char c2[];
cin >> c1;
cin.putback('a'); // 在 cin 缓冲区的当前指针处插入指定的字符,然后指针往前移一个字符
cin.putback('b');
cin.putback(c1);
cin >> c2;
// 输入 x,则 c1 的值为 x,c2 的值为 xba\0
} // 在 linux 系统中,一切设备都看作文件。而每打开一个文件,就有一个代表该打开文件的文件描述符(file descriptor)
// 程序启动时,默认打开三个 I/O 设备文件:标准输入文件(stdin),标准输出文件(stdout),标准错误输出文件(stderr),其对应的文件描述符分别为 0, 1, 2

2、字符串内存流
CppIO3.h

#pragma once 

#include <string>

using namespace std;

namespace NativeDll
{
class CppIO3
{
public:
string Demo();
};
}

CppIO3.cpp

/*
* 字符串内存流
*/ #include "pch.h"
#include "CppIO3.h" #include <iostream>
#include <strstream> // istrstream(继承自istream), ostrstream(继承自ostream) using namespace NativeDll; void cppio3_demo1();
void cppio3_demo2(); string CppIO3::Demo()
{
// 输入字符串流
cppio3_demo1(); // 输出字符串流
cppio3_demo2(); // 输入输出字符串流
char a[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' };
strstream strio(a, sizeof(a), ios::in | ios::out); return "看代码及注释吧";
} void cppio3_demo1()
{
char a[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' };
char b[]; // 创建一个输入字符串流,其数据来源为 a,缓冲区大小为 sizeof(a)
istrstream strin(a, sizeof(a));
for (int i = ; i < ; i++)
{
// 将输入字符串流中的数据(即数据源 a )赋值给 b
strin >> b[i];
}
// 此时 b 中的数据为 abcde } void cppio3_demo2()
{
char a[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' };
char c[]; // 创建一个输出字符串流,其数据输出的目标为 c,缓冲区大小为 sizeof(c)
ostrstream strout(c, sizeof(c));
for (int i = ; i < ; i++)
{
// 将数据 a 赋值给输出字符串流(即数据输出目标 c)
strout << a[i];
}
// ends 就是 '\0'
strout << ends;
cout << c << endl; // 输出结果为 abcde
}

OK
[源码下载]

不可或缺 Windows Native (13) - C++: 标准输入, 标准输出, 字符串内存流的更多相关文章

  1. 不可或缺 Windows Native 系列文章索引

    [源码下载] 不可或缺 Windows Native 系列文章索引 作者:webabcd 1.不可或缺 Windows Native (1) - C 语言: hello c 介绍不可或缺 Window ...

  2. 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出

    [源码下载] 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 预处理命令 输入 ...

  3. 不可或缺 Windows Native (2) - C 语言: 常量,变量,基本数据类型

    [源码下载] 不可或缺 Windows Native (2) - C 语言: 常量,变量,基本数据类型 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 常量 变量 基本 ...

  4. 不可或缺 Windows Native (5) - C 语言: 数组

    [源码下载] 不可或缺 Windows Native (5) - C 语言: 数组 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 数组 示例cArray.h #ifn ...

  5. 不可或缺 Windows Native (10) - C 语言: 文件

    [源码下载] 不可或缺 Windows Native (10) - C 语言: 文件 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 文件 示例cFile.h #ifn ...

  6. 不可或缺 Windows Native (25) - C++: windows app native, android app native, ios app native

    [源码下载] 不可或缺 Windows Native (25) - C++: windows app native, android app native, ios app native 作者:web ...

  7. 不可或缺 Windows Native (11) - C++: hello c++, C++ 与 C语言的区别小介

    [源码下载] 不可或缺 Windows Native (11) - C++: hello c++, C++ 与 C语言的区别小介 作者:webabcd 介绍不可或缺 Windows Native 之 ...

  8. 不可或缺 Windows Native (1) - C 语言: hello c

    [源码下载] 不可或缺 Windows Native (1) - C 语言: hello c 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 在 Windows Sto ...

  9. 不可或缺 Windows Native (7) - C 语言: 指针

    [源码下载] 不可或缺 Windows Native (7) - C 语言: 指针 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 指针 示例cPointer.h #i ...

随机推荐

  1. Eclipse 工程迁移到 Android Studio

    目标:迁移成功,并成功正常运行! 附加:同步视频在文章后面! 两种方式: 1. 用Gradle导出,在Android Studio中用Gradle导入 (不推荐) 2. 用Android Studio ...

  2. Android开发学习之路-回调实现Service向activity传递数据

    开启服务的时候,如果我们是通过bindService来绑定服务并且要向服务传递数据,可以直接在Intent中设置bundle来达到效果,但是如果是我们需要从服务中返回一些数据到Activity中的时候 ...

  3. lua元表Metatable

    Lua 中的每个值都可以用一个 metatable. 这个 metatable 就是一个原始的 Lua table , 它用来定义原始值在特定操作下的行为. 你可以通过在 metatable 中的特定 ...

  4. CefSharp .net

    构建基于Chromium的应用程序 chromium是google chrome浏览器所采用的内核,最开始由苹果的webkit发展而出,由于webkit在发展上存在分歧,而google希望在开发上有更 ...

  5. 细数改善WPF应用程序性能的10大方法

    WPF(Windows Presentation Foundation)应用程序在没有图形加速设备的机器上运行速度很慢是个公开的秘密,给用户的感觉是它太吃资源了,WPF程序的性能和硬件确实有很大的关系 ...

  6. salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句

    salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex语言和java很多的语法类似,今天总结的是一些简单的Apex的变量等知识. 有如下几种常 ...

  7. .NET面试题解析(04)-类型、方法与继承

      系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 做技术是清苦的.一个人,一台机器,相对无言,代码纷飞,bug无情.须梦里挑灯,冥思苦想,肝血暗耗,板凳坐穿 ...

  8. FileUpload实现文件上传(包含多文件)

    package com.hzml.serve; import java.io.File; import java.io.IOException; import java.io.PrintWriter; ...

  9. 【原创】C#搭建足球赛事资料库与预测平台(6) 赔率数据表设计2

            本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源C#彩票数据资料库系列文章总目录:[目录]C#搭建足球赛事资料库与预测平台与彩票数据分析目录 本篇文章开始将逐步介 ...

  10. 浅谈AngularJS中的$parse和$eval

    AngularJS的初学者常常会对$parse和$eval两个内建服务感到有些困惑,今天我们就来说说AngularJS中的$parse和$eval. 总的来说,$parse和$eval都是作用于Ang ...