Код, приведенный ниже, является моим исходным кодом, который был частью лабораторного теста, который я недавно принял. Меня подсчитали очки, потому что программа не отображала линию правильно и не окрашивала ее так, как предполагалось. Я нашел это невероятным, так как я тестировал его на 3 очка (чтобы нарисовать две линии), чтобы сэкономить время на испытании с течением времени, и он отлично работает. Пример ввода для теста состоял из 5 пунктов (четыре строки). Когда я загрузил свой код и протестировал его с 5 очками, графический дисплей действительно сходит с ума, рисуя, казалось бы, случайные строки. Я отлаживал его и после третьей итерации (четвертый раз через цикл) первого цикла, где программа собирает координаты x и y от пользователя, все, что вводится для значения координаты x, похоже, переписывает цикл контрольная переменная no_points[0]
, без видимых причин. Мои мысли заключаются в том, что переменная управления контуром и четвертое значение координаты x совместно используют адрес. Как я уже сказал, я уже прошел тест и получил оценку, поэтому я не ищу раздаточный материал, чтобы обманывать что-либо. Я просто не могу понять, почему это происходит. Любая помощь будет оценена по достоинству.Для цикла переписывания счетчика цикла?
#include <iostream>
#include "graph1.h"
#include <cstdlib>
using namespace std;
// declaring prototypes
void getData(int* no_points, int* x, int* y, int* r, int* g, int* b);
void drawPolyLine(int* objects, int*x, int* y, int* no_points);
void colorPolyLine(int* objects, int* no_points, int r, int g, int b);
// declaring main
int main()
{
int no_points = NULL;
int x = NULL;
int y = NULL;
int r = NULL;
int g = NULL;
int b = NULL;
int objects[50] = {};
int again = 1;
do
{
displayGraphics();
clearGraphics();
getData(&no_points, &x, &y, &r, &g, &b);
drawPolyLine(objects, &x, &y, &no_points);
colorPolyLine(objects, &no_points, r, g, b);
cout << "Please enter a 0 to exit the program..." << endl;
cin >> again;
} while (again == 1);
return 0;
}
// declaring functions
void getData(int* no_points, int* x, int* y, int* r, int* g, int* b)
{
cout << "Enter # of points: " << endl;
cin >> *no_points;
cout << "Number of points entered is " << *no_points << endl;
cout << "Enter r/g/b colors..." << endl;
do
{
cout << "Enter a red value between 0 and 255 " << endl;
cin >> *r;
} while (*r < 0 || *r > 255);
do
{
cout << "Enter a green value between 0 and 255 " << endl;
cin >> *g;
} while (*g < 0 || *g > 255);
do
{
cout << "Enter a blue value between 0 and 255 " << endl;
cin >> *b;
} while (*b < 0 || *b > 255);
for (int i = 0; i < no_points[0]; i++)
{
cout << "Enter the x/y coord for Point #" << i + 1 << endl;
cin >> x[i]; cin >> y[i];
}
}
void drawPolyLine(int* objects, int* x, int* y, int* no_points)
{
for (int i = 0; i < no_points[0] -1; i++)
objects[i] = drawLine((x[i]), (y[i]), (x[i + 1]), (y[i + 1]), 3);
}
void colorPolyLine(int* objects, int* no_points, int r, int g, int b)
{
for (int i = 0; i < no_points[0] - 1; i++)
{
setColor(objects[i], r, g, b);
}
}
Почему вы используете 'NULL' для 0 ионов всю вашу инициализацию? Это просто неправильно. – Donnie
x и y - это ints, а не массивы. Из-за вашего кода вы теряете какую-то случайную память. Вам повезло, что он работает 4 раза подряд. (Это также относится к no_points, но так как вы никогда не проходите мимо [0], вам повезло) – Donnie
«Я уже прошел тест и получил оценку» - провалился? –