я не могу заставить мою программу работать, я попробовал это уже с маркерами (goto).
но я не могу заставить его работать. Я также пытался улучшить цикл, но он заканчивается бесконечным циклом. Спасибо за помощь!
#include <iostream> //includes
using namespace std;
int makedreieck(int länge) // function for drawing a triangle
{
int rows=0; //rows
int draw=0; //drawed
while(draw <= länge)
{
draw++;
cout << "*";
if(draw == länge-1)
{
rows++;
draw = länge-rows;
cout << endl;
}
if(draw == 1)
{
getchar();
return 0;
}
}
}
int main(char argument)
{
int dreieck;
cin >> dreieck;
makedreieck(dreieck);
getchar();
return 0;
}
наконец-то все заработало … если кому-то нужен код:
#include <iostream>
#include <time.h>
#include <windows.h>
#include <tchar.h>
using namespace std;
int createtriangle(int length, bool custom, char symbol)
{
clock_t start, finish;
length++;
int OK=0;
int OK_ABORT;
int TRIANGLE_NOT_ALLOWED;
enum returnvalues{OK, OK_ABORT, TRIANGLE_NOT_ALLOWED};
if(length<=0)
{
cerr << "Dreieck mit einer Laenge von " << length-1 <<" unerlaubt.";
return TRIANGLE_NOT_ALLOWED;
}
if(length>81)
{
cout << "Es wurde eine ueber 80 Sternchen lange Treppe entdeckt." << endl << "Es wird empfohlen die Operation abzubrechen"<< endl << "1: abbrechen 2: weiter"<<endl<<"Auswahl: ";
int sel;
cin >> sel;
getchar();
if(sel>2)
{
cout << "Es gibt die Auswahl: "<<sel<<" nicht.";
}
system("cls");
switch(sel)
{
case 1:
return OK_ABORT;
break;
case 2:
break;
}
}
int rows=0;
int draw=0;
start = clock();
while(draw <= length)
{
draw++;
if(rows>=1&&custom==false)
{
cout << "*";
}
if(rows>=1&&custom==true)
{
cout << symbol;
}
if(draw == length)
{
if(rows>=1)
{
cout << endl;
}
rows++;
draw = length-rows;
}
if(rows == length)
{
finish=clock();
if(custom==false)
{
cout << "Es wurde eine "<<length-1<<" Sternchen lange Treppe gebaut."<<endl;
}
else if(custom==true)
{
cout << "Es wurde eine "<<length-1<<" "<<symbol<<" lange Treppe gebaut."<<endl;
}
cout << "Es wurden "<< static_cast<double>( finish - start ) /CLOCKS_PER_SEC<< " Sekunden gebraucht.";
return OK;
}
}
return OK;
}
int main()
{
START:
system("cls");
int dreieck;
char time[9];
cout << "Wie gross soll die Treppe sein?: ";
cin >> dreieck;
system("cls");
cout << "Soll ein custom symbol verwendet werden?"<<endl<<"Ja:1 Nein:2"<<endl<<"Auswahl: ";
int menu2;
cin >> menu2;
system("cls");
bool customtrue;
char symbolcustom;
if(menu2>2)
{
cout << "Die Auswahl: " << menu2 << " ist nicht verfügbar";
getchar();
goto START;
}
switch(menu2)
{
case 1:
customtrue = true;
cout << "Symbol angeben(1Char max): ";
cin >> symbolcustom;
break;
case 2:
customtrue = false;
break;
}
system("cls");
createtriangle(dreieck,customtrue,symbolcustom);
getchar();
getchar();
menumark:
system("cls");
cout << "Soll erneut eine Treppe gebaut werden?"<<endl<<"1: Ja 2: Nein"<<endl<<"Auswahl: ";
int menu;
cin >> menu;
if(menu>2)
{
cout <<"Es gibt keine "<<menu<<" Auswahl.";
getchar();
goto menumark;
}
switch(menu)
{
case 1:
goto START;
break;
case 2:
exit(0);
break;
}
return 0;
}
Используя ваш исходный код …
#include <iostream> //includes
using namespace std;
int makedreieck(int länge) // function for drawing a triangle
{
int rows=0; //rows
int draw=0; //drawed
while(draw <= länge)
{
draw++;
cout << "*";
if(draw == länge-1)
{
rows++;
draw = länge-rows;
cout << endl;
}
if(draw == 1)
{
getchar();
return 0;
}
}
}
int main(char argument)
{
int dreieck;
cin >> dreieck;
makedreieck(dreieck);
getchar();
return 0;
}
первые несколько ошибок компиляции с g ++,…
[D: \ DEV \ тест] > gnuc foo.cpp foo.cpp: 3: 1: ошибка: отклонение '\ 344' в программе foo.cpp: 7: 5: ошибка: отклонение '\ 344' в программе foo.cpp: 11: 9: ошибка: отклонение '\ 344' в программе foo.cpp: 14: 13: ошибка: отклонение '\ 344' в программе foo.cpp: 3: 23: ошибка: ожидается ',' или '...' перед 'nge' foo.cpp: в функции 'int makedreieck (int)': foo.cpp: 7: 21: ошибка: ожидается ')' перед 'nge' foo.cpp: 7: 21: ошибка: 'nge' не был объявлен в этой области foo.cpp: 7: 24: ошибка: ожидается ';' перед знаком ")" foo.cpp: 5: 9: предупреждение: неиспользуемая переменная 'lines' [-Wunused-variable] foo.cpp: 32: 1: ошибка: ожидается '}' в конце ввода foo.cpp: 32: 1: предупреждение: нет оператора возврата в функции, возвращающей не void [-Wreturn-type] [D: \ DEV \ тест] > _
из-за того, что компилятор MingW g ++ для Windows не соответствует стандарту C ++ относительно набора символов, принятого в идентификаторах. Определенные числа символов, представленные в отчете, немного странные, поскольку исходный код был сохранен как Windows ANSI Western, но g ++ также допускает ошибку с исходным кодом как UTF-8. По состоянию на 2013 несколько компиляторов в соответствии с исходный набор символов.
Единственные безопасные символы — от A до Z, подчеркивание и цифры от 0 до 9.
На практике это означает: напиши свой исходник на английском, лингва франка разработки программного обеспечения, а затем может поддерживаться другими и компилироваться другими компиляторами.
После исправления я получаю следующие ошибки компиляции:
[D: \ DEV \ тест] > gnuc foo.cpp foo.cpp: в функции 'int makedreieck (int)': foo.cpp: 19: 21: ошибка: 'getchar' не был объявлен в этой области foo.cpp: в глобальном масштабе: foo.cpp: 25: 5: предупреждение: первый аргумент 'int main (char)' должен быть 'int' [-Wmain] foo.cpp: 25: 5: предупреждение: 'int main (char)' принимает только ноль или два аргумента [-Wmain] foo.cpp: в функции 'int main (char)': foo.cpp: 30: 13: ошибка: 'getchar' не был объявлен в этой области foo.cpp: в функции 'int makedreieck (int)': foo.cpp: 23: 1: предупреждение: управление достигает конца не пустой функции [-Wreturn-type] [D: \ DEV \ тест] > _
Ошибки здесь из-за не включая заголовок <stdio.h>
что объявляет getchar
функция.
После исправления ошибок больше не сообщается.
Тем не менее, предупреждения серьезны:
[D: \ DEV \ тест] > gnuc foo.cpp foo.cpp: 27: 5: предупреждение: первый аргумент 'int main (char)' должен быть 'int' [-Wmain foo.cpp: 27: 5: предупреждение: 'int main (char)' принимает только ноль или два аргумента [-Wmain] foo.cpp: в функции 'int makedreieck (int)': foo.cpp: 25: 1: предупреждение: управление достигает конца не пустой функции [-Wreturn-type] [D: \ DEV \ тест] > _
Нестандартный main
подпись означает, что даже после включения требуемого заголовка это не действителен C ++.
Просто удалите (неиспользованный) формальный аргумент.
Затем код компилируется, остается только одно очень серьезное предупреждение:
[D: \ DEV \ тест] > gnuc foo.cpp foo.cpp: в функции 'int makedreieck (int)': foo.cpp: 25: 1: предупреждение: управление достигает конца не пустой функции [-Wreturn-type] [D: \ DEV \ тест] > _
Который абсолютно необходимо исправить!
Подводя итог:
Измените код, чтобы не использовать неанглийские буквы в идентификаторах. Эти национальные символы в порядке. стандарт C ++, но немногие компиляторы поддерживают их. В частности g ++ не делает.
Включите все необходимые заголовки.
Используйте стандартную подпись для main
,
И не забудьте исправить недостающее return
вещь утверждения
затем Вы можете начать отладку!
На первой итерации вы устанавливаете draw
до 1, так (draw == 1)
это правда, и функция возвращает.
Попробуйте уменьшить länge
вместо draw
когда draw == länge-1
, сброс draw
до 0 в этой точке и выйти в конце цикла, когда länge == 1
, Отрегулируйте по вкусу.