Member 13050643 Ответов: 3

Как я могу наблюдать (отлаживать) логические значения


У меня есть следующий код, и я не понимаю, почему П4(3,7)дает аргумент returnvalue значение true (1) , так как здесь 7(контемп.XYCoord[1]) больше, чем за 5 (ReCoordRo.XYCoord[1]), поэтому я хотел бы знать способ, чтобы следить за логическое Rechteck1.содержит(Р4), смотреть окна не дает мне такой возможности, так как я могу идти об этом ? Тнх

<pre>#include <iostream>
#include <array>

 using namespace std;
    class Punkt {
        public: int XYCoord [2]={};
        void setupCoord (int x, int y){
            XYCoord[0]=x;
            XYCoord[1]=y;
        }
    };
    class Rechteck {
        public: Punkt ReCoordLu,ReCoordRo;

        double flaeche(double x, double y){
            double xy=x*y;
            return xy;
            }
        bool contains ( Punkt &p){
            Punkt *ConTemp1=&p;
            Punkt ConTemp ;
            ConTemp = *ConTemp1;

            if (ConTemp.XYCoord[0]>=ReCoordLu.XYCoord[0]&&ConTemp.XYCoord[1]<=ReCoordRo.XYCoord[1]){
                return true;}
            else{
                return false;}
                };
        bool contains (Rechteck &){
            if (1){
                return true;}
            else
                return false;
            }
        };
int main()
{/* Rechteck sharedRectangle (Rechteck a , Rechteck b){
            Rechteck c;
            return Rechteck c;
            } */

        Punkt P1,P2,P3,P4;
        P1.setupCoord(1,1);
        P2.setupCoord(5,5);
        P3.setupCoord(3,3);
        P4.setupCoord(3,7);
        Rechteck Rechteck1;
        Rechteck1.ReCoordLu.setupCoord(3,3);
        Rechteck1.ReCoordRo.setupCoord(9,9);
Rechteck1.contains(P4) 

        cout<<"hello"<<P2.XYCoord[0]<<Rechteck1.ReCoordLu.XYCoord[0]
        <<Rechteck1.flaeche(5,5)<<Rechteck1.contains(P4) ;

        return 0;};


Что я уже пробовал:

часы windows, стеки вызовов windows

3 Ответов

Рейтинг:
23

OriginalGriff

Хм.
Посмотри на свой contains метод:

bool contains (Rechteck &){
    if (1){
        return true;}
    else
        return false;
    }
Он всегда возвращается true потому что 1-ненулевая константа, и любое ненулевое значение является "истинным" в C / C++


Member 13050643

Это если бы я ввел прямоугольник (Rechteck), но я ввел точку (Punkt)P4 ;Rechteck1.contains(P4)-> Punkt P1,P2,P3,P4; поэтому применяется метод bool contains ( Punkt &p), и если я изменю значение P4 на (77, -78), то на самом деле получу выход 0. До сих пор не знаю почему .

OriginalGriff

Так что поставьте точку останова на линии
Punkt * ConTemp1=&p;
и посмотрите, что происходит.

Member 13050643

Это действительно работает, похоже, я просто перепутал Rechteck1.ReCoordLu.setupCoord(3,3)с
Rechteck1.ReCoordRo.setupCoord(9,9); в любом случае спасибо

Рейтинг:
2

Patrice T

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
15

Member 13050643

Проблема решена !Это действительно работает, похоже, я просто перепутал Rechteck1.ReCoordLu.setupCoord(3,3)с
Rechteck1.ReCoordRo.setupCoord(9,9)