リブlab

理系大学生のIT・電気・大学・趣味についての日記

個人的メモ2

・toggle: 同じ操作で二つの状態に交互に切り替わること

・JCT(Japanese consumption tax)= 消費税

・VAT(value-added tax)= 付加価値税

プリプロセッサで#の行が処理されるよ

エスケープシーケンスのベルはwindows10おなじみのテレレーンって鳴るよ。vs_installer開けたら鳴るやつね。

・フォームフィードまたは改ページって言われる¥fはプリンターやコピー機に印刷することらしい。らしい。

・水平タブ(¥t)は、タブを入れて一つ右の区切りに送る。垂直タブ(¥V)は、一つ下の行に移る。

・¥rは復帰(行の先頭に戻る)という意味の制御コード。 16進数では「0x0D」 アスキーコード(いわゆる半角文字)の空白(0x20)未満のコードは、制御コードに割り当てられている。

・¥ ≒ \ はわかるよね?打つときは普通¥だけどlinuxとか \ これになる。visual stdioでバックスラッシュでも打ってみたら¥になって改行された。¥= \ でええのか?

・strcpyが使えなかったら_sを後ろにつけよう

・Cの構造体はメンバ関数は無いぞ。C++の構造体とクラスの違いは前回のメモに書いた通り。

c++)・cin << ○○;とするとストリームの中に入力したリテラルを記録することができる。
enter押すまでずっと、記録できる。
△△(enter)と入力するとそのリテラルが一個の入力して保存される。
△△(スペース)△△(enter)と入力するとリテラルが二つストリームに保存される。

 気を付けないといけないのは、例えcin << a;としてもストリームにはenterキーを押すまでは、入力が可能であること。よって、cin << a;と書いて△△(スペース)□□(enter)とするとストリームには□□が残る。

 なので、ユーザーが間違えて一個多く入力してしまうとストリームには不必要なデータが残る。
よって、予期せぬ値を出力することになる。

int main()
{
    int a, b, c;

 cin >> a >> b;
 cout << a << b;
 cout << a << b;

 cout << "cに値を記録します。";
 while (cin >> c)
    cout << c;
}

このプログラムを、一度入力した後に二回出力しもう一度入力をするというつもりで書く人がいると思います。
これに対して一回目の入力を

1 2 3 4 5

とします。(3,4,5を二回目の入力で打つつもりだったが間違えて一回目の入力で打ち込んだとする。)しかし、二回目の入力は現れず、出力されます。

1 2 1 2 cに値を代入します3 4 5

となります。1212はa,bに入力していたため予期していた通りに動いています。
しかし、3,4,5は初めの入力しか行っていないのにcに入力されることになります。

 では、どうするのか?
cin.ignore()を使いましょう。使用例はここにあります。↓

stackoverflow.com

 ここに使い方まで丁寧に書いてあるので、ここを足掛かりにcin.ignore()への理解を深めましょう。