Member 13396113 Ответов: 1

Наконец-то делаем границу


Эй, ребята, я пытаюсь сделать границу точно так же, как и на моем предыдущем вопросе. Извините, что я завел об этом совершенно новую тему.
В любом случае. у меня возникли проблемы с созданием этой горизонтальной линии
персонаж отображается только с правой стороны, но не полностью.

#include <stdio.h>
#include <windows.h>

HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
COORD CursorPosition;

void gotoXY(int x, int y); 
void border();


int main()
{int YEAR;
	
	border();
	

}

void gotoXY(int x, int y) 
{ 
CursorPosition.X = x; // Locates column
CursorPosition.Y = y; // Locates Row
SetConsoleCursorPosition(console,CursorPosition); // Sets position for next thing to be printed 
}

void border()
{
	int i;
	
	/*corners*/
	gotoXY(7, 3); printf(" %c", 201);
	gotoXY(90, 3);printf(" %c", 187);
	gotoXY(7, 30); printf(" %c", 200);
	gotoXY(90, 30); printf(" %c", 188);
	
	/*vertical lines*/
	for(i = 4; i < 30; i++)
	{
		gotoXY(7, i); printf(" %c", 186);
		gotoXY(90, i); printf(" %c", 186);
	}
	
	/*horizontal lines */
	for (i = 7; i < 90; i++)
	{
		gotoXY(i, 3); printf(" %c", 205);
		gotoXY(i, 30); printf(" %c", 205);
	}
}


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

/*horizontal lines */
	for (i = 7; i < 90; i++)
	{
		gotoXY(i, 3); printf(" %c", 205);
		gotoXY(i, 30); printf(" %c", 205);

OriginalGriff

"у меня проблемы" мало что говорит нам о том, в чем проблема!
Что происходит такого, чего вы не ожидали, или не происходит того, чего вы ожидали?

Member 13396113

горизонтальная часть вообще не видна.
Я имею в виду, что это было так, но только на gotoXY(x, 3/30), а не на всем.

1 Ответов

Рейтинг:
9

OriginalGriff

Цитата:
горизонтальная часть вообще не видна.
Я имею в виду, что это было так, но только на gotoXY(x, 3/30), а не на всем.

Удалите пробел из printfс... :смеяться:
gotoXY(i, 3); printf(" %c", 205);
                      ^
                      |
gotoXY(i, 30); printf(" %c", 205);
                       ^
                       |
Следующий в цикле немедленно перезаписывает символ, который вы написали!

Цитата:
Я вижу, но для других, таких как вертикальные, я поместил на него пространство, и он все еще работал нормально. Я просто подумал, что вы всегда должны ставить пробел, если его %c


Нет, пробел-это печатный символ.
Когда вы используете его для записи горизонтальной линии он перезаписывается:
0123456789  (column number)
 |          (after gotoXY(0, 1); printf)
  |         (after gotoXY(1, 1); printf)
   !        (after gotoXY(2, 1); printf)
...


Цитата:
Теперь у меня проблемы с программой.
Как вы можете видеть, все имеет значение, кроме того, что указано в операторах if/else.
когда я вставляю gotoXY, я получаю ошибки типа " Else has no previous if"

Это потому, что вы ленивы! :смеяться:
Заведите привычку всегда использовать фигурные скобки, когда это возможно: даже для одной строки if или else заявления:
if (a == b)
   {
   statement;
   }
else
   {
   statement;
   }
Если вы этого не сделаете, то в конечном итоге сделаете это:
if (a == b)
   gotoXY(10,2);
   printf("Product:%d", base);
else
   statement;
Который выглядит верно, но компилятор справедливо видит это так:
if (a == b)
   {
   gotoXY(10,2);
   }
printf("Product:%d", base);
else
   statement;
И жалуется, что он не может соответствовать else к if
Это сэкономит вам много времени и почесывания головы!


Member 13396113

Я вижу, но для других, таких как вертикальные, я поместил на него пространство, и он все еще работал нормально. Я просто подумал, что вы всегда должны ставить пробел, если его %c

Member 13396113

Теперь у меня проблемы с программой.
Как вы можете видеть, все имеет значение, кроме того, что указано в операторах if/else.
когда я вставляю gotoXY, я получаю ошибки типа " Else has no previous if"

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>


HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
COORD CursorPosition;

void gotoXY(int x, int y); 
void border();
int do_while_prod();
int while_prod();
int for_prod();

int
main(void)
{
	int choice;
	char cont_end;
	
	do {
		border();
		gotoXY(56, 5);printf("\tMenu\n");
		gotoXY(53, 8);printf("1. Do While\n");
		gotoXY(53, 9);printf("2. While\n");
		gotoXY(53, 10);printf("3. For\n");
		gotoXY(53, 11);printf("4. Exit\n");
		gotoXY(53, 16);printf("Choice? :");
		scanf("%d", &choice);
		
		switch (choice)
		{
			case 1:
				system("cls");
				border();	
				do_while_prod();
				break;
			case 2:
				system("cls");
				border();	
				while_prod();
				break;
			case 3:
				system("cls");
				border();	
				for_prod();
				break;
			case 4:	
				return 0;
				break;
			default:
				border();	
				gotoXY(53, 17);printf("Invalid Choice.");
				break;
		}
		
		gotoXY(53, 18);printf("Try another one? Y/N :");
		scanf(" %c", &cont_end);
		system("cls");
	}
	while (cont_end == 'y' || cont_end == 'Y');
	
	return (0);
}

int do_while_prod()
{
	int base, exponent;
	int product=1;
	int ctr=1;
	
		gotoXY(53,5);printf("Base:");
		scanf("%d", &base);
		gotoXY(53,6);printf("Exponent:");
		scanf("%d", &exponent);
		if (exponent == 1)	
			printf("Product:%d", base);
		else if (exponent == 0)
			printf("Product:%d", product);
		else
			{
			product = base * base;
			ctr++;
			}
		
		do {
			product = product * base;
			ctr++;
		}
		while (ctr != exponent);
		
		gotoXY(53,8);printf("Product:%d\n", product);
}

int while_prod()
{
	int base, exponent;
	int product=1;
	int ctr=1;
	
		gotoXY(53,5);printf("Base:");
		scanf("%d", &base);
		gotoXY(53,6);printf("Exponent:");
		scanf("%d", &exponent);
		if (exponent == 1)	
			printf("Product:%d", base);
		else if (exponent == 0)
			printf("Product:%d", product);
		else
			{
			product = base * base;
			ctr++;
			}
		while(ctr != exponent)
		{
			product = product * base;
			ctr++;
		}
		gotoXY(53, 8);printf("Product:%d\n", product);	
}

int for_prod()
{
	int base, exponent;
	int product=1;
	int ctr=1;
	
		gotoXY(53,5);printf("Base:");
		scanf("%d", &base);
		gotoXY(53,6);printf("Exponent:");
		scanf("%d", &exponent);
		if (exponent == 1)
			printf("Product:%d", base);
		else if (exponent == 0)
			printf("Product:%d", product);
		else
			{
			product = base * base;
			ctr++;
			}
		for (ctr=2; ctr!=exponent; ctr++)
			{
				product = product * base;
			}
		gotoXY(53, 8);printf("Product:%d\n", product);
}

void gotoXY(int x, int y) 
{ 
CursorPosition.X = x; // Locates column
CursorPosition.Y = y; // Locates Row
SetConsoleCursorPosition(console,CursorPosition); // Sets position for next thing to be printed 
}

void border()
{
	int i;
	
	/*corners*/
	gotoXY(45, 3); printf(" %c", 201);
	gotoXY(85, 3);printf(" %c", 187);
	gotoXY(45, 20); printf(" %c", 200);
	gotoXY(85, 20); printf(" %c", 188);
	
	/*vertical lines*/
	for(i = 4; i < 20; i++)
	{
		gotoXY(45, i); printf(" %c", 186);
		gotoXY(85, i); printf(" %c", 186);
	}
	
	/*horizontal lines*/
	for(i=47; i < 86; i++)
	{
		gotoXY(i, 3); printf("%c", 205);
		gotoXY(i, 20); printf("%c", 205);
	}

}

OriginalGriff

Ответ обновлен.