入力と出力にストリームを使用する
一般的に使用されるフロー制御シンボル
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オブジェクト、文字列タイプのInputVar、終了文字の読み取り) |
Cin.getline(配列タイプのInputVar、読み取られた文字数( '\ 0'を含む)) |
操作上の違い
Getline()は非常に使いやすいですが、すべての読み取り要素は1行以内である必要があります。つまり、新しい行の文字「\ n」は、読み取るバッファーでは許可されていません。cin.getline()は使いにくいです。 、名前文字配列に8文字を読み取りたいとすると、cin.getline()は8番目の文字位置に「\ 0」を挿入するため、最初の7文字のみを読み取り、名前文字に割り当てることができます。配列、最終名の文字配列には7つの有効な要素しかありません。
セキュリティの違い
cin.getline()は使いやすいものではありませんが、7番目の要素の後に「\ 0」の読み取り終了マークが挿入されるため、非常に安全だと思います。入力する要素の数に関係なく、cin.getline()のみ最初の7つの要素が読み取られ、メモリの問題は発生しません。
場所の違い
花嫁へ() |
文字列クラスのメンバー関数 |
Cin.getline() |
istreamクラスのメンバー関数 |
C in.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 '要素をバッファに挿入している間に変数を挿入するため、2つは異なります。
Cin.get()とcin.getline()の使用法の違い
異なる読み取り形式
cin.getline()は、ブランクを含むユーザー入力の行全体を確実にキャプチャします。cin.get()にブランクを含めることはできません。
さまざまな読み取り方法
Cin.getline(配列タイプのInputVar、読み取られた文字数( '\ 0'を含む)) |
cin.get(istreamオブジェクト、文字数を読み取る) |