まず、getline
成功したことを確認します。bool
それを理解するために、それを ean コンテキストで評価します。
while (getline(myfile, temp)) {
/* code goes here */
}
それ以外の
do {
getline(myfile, temp);
/* code goes here */
} while (true);
すぐに失敗したかどうかを確認せずに入力を行うことは絶対にしないでください。そうしないと、追跡するのに本当に厄介なバグが発生します。
次に、temp
少なくとも 1 文字の長さであることを確認してください。 temp.size() >= 1
安心してお任せ頂けれtrue
ばと思いますtemp[0]
。長さ 0 の が与えられた場合getline
、これを実行すると未定義の動作が発生します。未定義の動作は、ある状況ではまったく無害に動作し、後で予期しない場所で噛まれる可能性があるため、追跡するのは本当に面倒です。string
temp[0]
第三に、temp[0] != '='
の代わりに行うtemp[0] != "="
。 '='
は文字、"="
は 2 文字のバッファ、最初の文字は'='
2 番目の文字は です'\0'
。で示される 2 文字の配列は"="
、 を実行しようとすると、最初の文字へのポインターに暗黙的に変換され!=
、エラーが発生します (文字へのポインターを文字と比較する方法がわからないため)。