4

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を検索しようとしましたが、結果も同じでした. これはある種のトリックの質問であるはずですか、それとも何か不足していますか?

4

3 に答える 3

0

私はこれを試しましたが、これはうまくいくようです:area(1000000,1000000);

出力は次のとおりです。-727379968

于 2018-04-12T19:22:58.920 に答える