Ich schreibe ein einfaches Programm, um eine Box mit einem benutzerdefinierten Seitenlänge und Rand/Füllzeichen zu generieren. Alles funktioniert, wie ich es will, außer wenn es die Box an das Terminal druckt, erzeugt es ein seltsames Zeichen, das ich nirgends finden kann. Ich habe das Gefühl, wenn ich weiß, was es ist, könnte ich es vielleicht beheben. Meine Header-Datei ist hier:Welcher Charakter ist das?
#ifndef Box_h
#define Box_h
class Box
{
private:
int pSidelength;
char pBorder;
char pFill;
public:
Box(int pSidelength, char pBorder = '#', char pFill = '*');
int Sidelength;
char Border;
char Fill;
int Area();
int Perimeter();
int GetSize();
int Grow();
int Shrink();
char SetBorder();
char SetFill();
void Draw();
void Summary();
};
#endif Box_h
Meine Quelle für die Klasse ist:
#include <iostream>
#include "box.h"
#include <iomanip>
using namespace std;
Box::Box(int pSidelength, char pBorder, char pFill)
{
if (pSidelength < 1)
{
Sidelength = 1;
}
else if (pSidelength > 39)
{
Sidelength = 39;
}
else
{
Sidelength = pSidelength;
}
if (pBorder != '#')
{
SetBorder();
}
if (pFill != '*')
{
SetFill();
}
}
int main(void)
{
Box MyBox1(3,'#','*');
Box MyBox2(7, '^', '*');
Box MyBox3(10, '$', '%');
MyBox1.Grow();
MyBox2.Shrink();
MyBox1.Summary();
MyBox2.Summary();
MyBox3.Summary();
return 0;
}
int Box::Shrink()
{
if (Sidelength == 1)
{
Sidelength = Sidelength;
}
else
{
Sidelength = Sidelength - 1;
}
return Sidelength;
}
int Box::Grow()
{
if (Sidelength == 39)
{
Sidelength = Sidelength;
}
else
{
Sidelength = Sidelength + 1;
}
return Sidelength;
}
char Box::SetFill()
{
Fill = pFill;
return Fill;
}
char Box::SetBorder()
{
Border = pBorder;
return Border;
}
int Box::Area()
{
int area = (Sidelength)*(Sidelength);
return area;
}
int Box::Perimeter()
{
int perimeter = 4 * (Sidelength);
return perimeter;
}
int Box::GetSize()
{
int size = Sidelength;
return size;
}
void Box::Draw()
{
int j = 1;
int k = 1;
if (Sidelength == 1 || Sidelength == 2)
{
for (int i = 1; i <= Sidelength; i++)
{
while (j <= Sidelength)
{
cout << setw(2) << Border;
j++;
}
j = 1;
}
cout << endl;
}
else
{
for (int i = 1; i <= Sidelength; i++)
{
if (i == 1 || i == Sidelength)
{
while (k <= Sidelength)
{
cout << setw(2) << Border;
k++;
}
cout << endl;
k = 1;
}
else
{
while (j <= Sidelength)
{
if (j == 1 || j == Sidelength)
{
cout << setw(2) << Border;
}
else
{
cout << setw(2) << Fill;
}
j++;
}
cout << endl;
j = 1;
}
}
cout << endl;
}
}
void Box::Summary()
{
cout << "The Sidelength of the box is: " << Box::GetSize() << endl;
cout << "The Perimeter of the box is: " << Box::Perimeter() << endl;
cout << "The Area of the box is: " << Box::Area() << endl;
Box::Draw();
}
Das Programm hat ein Standard-Zeichen mit Border assoziiert/Füllen, wie in der Header-Datei angegeben. Wenn er gestartet wird, erzeugt es das:
Welche Charakter ist das, und alle Ideen auf, warum es in erster Linie erscheinen würde?
Bitte geben Sie ein [MCVE] zB in Ihrem Code über 'Box :: SetBorder()' wird nie aufgerufen. –
Ja ist es, im Konstruktor für die Box. Wenn der für Border/Fill übergebene Parameter kein Leerzeichen ist, ruft er SetBorder/SetFill auf, um den öffentlichen Variablen Border/Fill einen Wert zuzuweisen. –
'SetBorder' wird aufgerufen, setzt aber nicht den Wert von' pBorder', aus dem Ihr gefälschter Charakter stammt. – RichieHindle