if ステートメントの後のセミコロンが問題です
悪い:
if(st.size()>0); // <-- this should not be here!!!!!!!!
cout<<st.size();
適切に書き直されました:
if(st.size()>0) {
cout<<st.size();
}
また、@ WhozCraigが指摘したように、他のステートメントにもセミコロンがあります!
悪い:
if(!st.empty()); // <--BAD!
//do stuff
良い:
if(!st.empty()) {
//do stuff
}
いつも!!ブランチ (if、switch) とループ (for、while、do-while) にはブラケットを使用してください!!! それは大きな利益をもたらします!(言うまでもなく、このようなブロックが括弧なしで記述されるたびに、かわいい子猫が死んでしまいます!) ALWAYS!!
たとえば、これはデバッグで1日を殺す可能性があります:
悪い:
int i=0;
...
while(i++<1000);
doStuff(i);
良い:
int i=0;
...
while(i++<1000) {
doStuff(i);
}
注意してください(@WhozCraigが再び指摘したように)これは完全に有効な構文であるため、セミコロンで終了する分岐およびループステートメントの問題を自動的に解決しません。
if (condition);{ ...code... }
または
if (condition);
{
...code...
}
しかし、私の意見と経験では(これは完全に主観的なものです!) - 私自身、この罠に数回陥ったことがあります - 前述のステートメントの後に中括弧があるとき、私は決して間違いを犯していないことを経験しました.セミコロンをもう一度入力します。この慣習に従うことは特効薬でした。また、そこにセミコロンがあれば「珍しい文字のパターン」なので、見ただけですぐに目に留まります。