std ::getline()がフォーマットされた抽出後に入力をスキップするのはなぜですか?
std ::getline()は、フォーマットされた抽出の後に入力をスキップします。このエラーは、次のコードから簡単に確認できます-
サンプルコード
#include <iostream> #include <string> using namespace std; int main(){ string name; string city; if (cin >> name && getline(cin, city)){ cout << "Your name " << name << " and city " << city; } }
出力
Amal Your name Amal and city
プログラムが2番目の入力を受け取らないことがわかります。 2番目の入力が必要な場合もありますが、出力には最初の入力のみが表示されます。さて、問題はなぜそれがこのように振る舞うのかということです。
この問題の主な理由は、最初の文字列を書き込んでいるときに、EnterボタンまたはReturnボタンを押していることです。 EnterキーまたはReturnキーを押すと、現在の行の後に「\n」文字が挿入されます。このキャラクターが問題を引き起こしています。文字列の次の部分を無視しています。
名前が「Amal」の場合、内部的には「Amal\n」になります。この問題を克服するための1つのオプションは、最初の抽出後にstd ::cin.ignore()を呼び出すことです。次に、次に使用可能な文字を破棄するため、正常に機能します。
-
C ++で「名前空間stdを使用する」とはどういう意味ですか?
同じクラスに同じ名前の2人のPiyushがいる場合を考えてみましょう。それらを明確に区別する必要があるときはいつでも、名前とともにいくつかの追加情報を使用する必要があります。たとえば、地域、別の地域に住んでいる場合、母親や父親の名前などです。 同じ状況がC++アプリケーションでも発生する可能性があります。たとえば、xyz()という関数を持つコードを記述していて、同じ関数xyz()を持つ別のライブラリが利用可能であるとします。これで、コンパイラーは、コード内で参照しているxyz()関数のバージョンを知る方法がありません。 名前空間は、この問題を克服するように設計されており、異なるライブラリで
-
0が渡された場合にphpのin_arrayがtrueを返すのはなぜですか?
in_arrayがTrueを返す理由は、文字列から数値への変換である可能性があります。文字列が関数に渡されると、検索する必要のある値である0が返されます。 PHPはルーズジャグリングを使用します。つまり、要素を比較するときに===の代わりに==を使用します。したがって、タイプではなく、それらの値が比較されます。 もう1つの理由は、型ジャグリングです。これは、変数型がコードのコンテキストで処理されることを意味します。 たとえば、float値が変数に割り当てられると、それは浮動小数点値になります。文字列が整数にキャストされたときのように動作します この種の動作を回避するために、3番目のパラ