Programming: Principles and Practice using C++ の 5.10.1 章には、領域の不正な入力をデバッグするための "Try this" 演習があります。事前条件は長さと幅の入力が 0 または負の場合で、事後条件は面積が 0 または負の場合をチェックします。問題を引用すると、「このバージョンの領域の事前条件が成立するが、事後条件が成立しないような値のペアを見つけてください。」. これまでのコードは次のとおりです。
#include <iostream>
#include "std_lib_facilities.h"
int area (int length, int width) {
if (length <= 0 || width <= 0) { error("area() pre-condition"); }
int a = length * width;
if(a <= 0) { error("area() post-condition"); }
return a;
}
int main() {
int a;
int b;
while (std::cin >> a >> b) {
std::cout << area(a, b) << '\n';
}
system("pause");
return 0;
}
コードは機能しているように見えますが、どの入力が成功するための事前条件を取得し、事後条件をトリガーするかについて頭を悩ませることはできません。これまでのところ、入力の1つに文字列を入力しようとしましたが、プログラムを終了し、0に相当するASCIIを検索しようとしましたが、結果も同じでした. これはある種のトリックの質問であるはずですか、それとも何か不足していますか?