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
Теперь у меня проблемы с программой.
Как вы можете видеть, все имеет значение, кроме того, что указано в операторах 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);
}
}