2013-01-14 2 views
-2

내 프로그램이 작동하지 않아 마커 (goto)로 이미 시도해 보았습니다. 하지만 작동하지 않습니다. 또한 루프를 개선하려고 시도했지만 무한 루프로 끝납니다. 도와 주셔서 감사합니다! C++ 루프 (삼각형 서랍)

#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; 
} 
+2

무엇이 작동하지 않습니다. 디버그 했니? –

+2

여기에 대해서는별로 중요하지 않습니다. 어떤 출력을 기대합니까? 그리고 어떤 출력을 얻고 있습니까? –

+0

'makedreieck'에'return 0; '이 하나 있습니다; 당신은 끝에 하나도 가지고 있지 않습니다. 함수는 반환 값을 무시하기 때문에'void'를 반환해야하지만 값을 반환하지 않는 함수에 대해서는 컴파일러 경고를 무시하지 않아야합니다. 여기에 코드를 게시하기 전에 컴파일러 경고가 수정되어야합니다. (컴파일러가 경고를하지 않으면 경고를 켜는 방법을 찾고, 컴파일러가 경고를 할 수없는 경우 더 나은 컴파일러를 얻으십시오.) 이것은 문제와는 아무런 관련이 없습니다. 'makedreieck()'의'getchar()'은 무엇일까? 그것은 불필요한 것처럼 보입니다. –

답변

0

당신이 draw 1, 그래서 (draw == 1)이 사실이고 함수가 반환 설정합니다.

draw == länge-1, 그 시점에서 0으로 draw를 재설정 할 때 draw 대신 länge을 감소시키는 시도 때 루프의 끝 länge == 1에서 종료합니다. 취향에 맞게 조정하십시오.

2

소스 코드 사용 (& hellip;

#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 ++에서 처음 몇 번의 컴파일 오류, & hellip;

 
[d:\dev\test] 
>gnuc foo.cpp 
foo.cpp:3:1: error: stray '\344' in program 
foo.cpp:7:5: error: stray '\344' in program 
foo.cpp:11:9: error: stray '\344' in program 
foo.cpp:14:13: error: stray '\344' in program 
foo.cpp:3:23: error: expected ',' or '...' before 'nge' 
foo.cpp: In function 'int makedreieck(int)': 
foo.cpp:7:21: error: expected ')' before 'nge' 
foo.cpp:7:21: error: 'nge' was not declared in this scope 
foo.cpp:7:24: error: expected ';' before ')' token 
foo.cpp:5:9: warning: unused variable 'rows' [-Wunused-variable] 
foo.cpp:32:1: error: expected '}' at end of input 
foo.cpp:32:1: warning: no return statement in function returning non-void [-Wreturn-type] 

[d:\dev\test] 
> _ 

은 식별자가 허용하는 문자 집합에 대한 C++ 표준을 따르지 않는 Windows 용 MingW ++ 컴파일러 때문입니다. 소스 코드가 Windows ANSI Western으로 저장 되었기 때문에보고 된 특정 문자 수는 약간 이상합니다. 그러나 g ++는 UTF-8 소스 코드에서도 오류가 발생했습니다. 2013 년 현재 일부 컴파일러는에 부합합니다. 소스 문자 집합.

유일한 안전 문자는 Z를 통해입니다 밑줄 및 숫자 0 연습 9.

통해 의미 : 영어에 소스 코드를 작성의 공용어 소프트웨어 개발의하고, 다른 사람에 의해 유지되고 다른 컴파일러에 의해 컴파일 될 수 있습니다. 여기

 
[d:\dev\test] 
>gnuc foo.cpp 
foo.cpp: In function 'int makedreieck(int)': 
foo.cpp:19:21: error: 'getchar' was not declared in this scope 
foo.cpp: At global scope: 
foo.cpp:25:5: warning: first argument of 'int main(char)' should be 'int' [-Wmain] 
foo.cpp:25:5: warning: 'int main(char)' takes only zero or two arguments [-Wmain] 
foo.cpp: In function 'int main(char)': 
foo.cpp:30:13: error: 'getchar' was not declared in this scope 
foo.cpp: In function 'int makedreieck(int)': 
foo.cpp:23:1: warning: control reaches end of non-void function [-Wreturn-type] 

[d:\dev\test] 
> _ 

오류 getchar 함수를 선언 헤더 <stdio.h>을 포함하지 않음에 기인한다 :

나는 다음과 같은 컴파일 오류를 얻을 고정 후.

더 이상 오류가보고되지 않는 문제를 수정했습니다.

그러나, 경고는 심각한 :

 
[d:\dev\test] 
>gnuc foo.cpp 
foo.cpp:27:5: warning: first argument of 'int main(char)' should be 'int' [-Wmain 
foo.cpp:27:5: warning: 'int main(char)' takes only zero or two arguments [-Wmain] 
foo.cpp: In function 'int makedreieck(int)': 
foo.cpp:25:1: warning: control reaches end of non-void function [-Wreturn-type] 

[d:\dev\test] 
> _ 

비표준 main 특성도 요구 헤더를 포함한 후,이 유효하지 C++가 있음을 의미한다.

(사용되지 않은) 공식 인수를 제거하십시오.

그런 다음 코드는 하나의 매우 심각한 경고가 남은, 컴파일 : 절대적으로 고정 될 필요가

 
[d:\dev\test] 
>gnuc foo.cpp 
foo.cpp: In function 'int makedreieck(int)': 
foo.cpp:25:1: warning: control reaches end of non-void function [-Wreturn-type] 

[d:\dev\test] 
> _ 

!

합산 :

  • 변경 식별자에 영어 이외의 문자를 사용하지 않도록 코드입니다. 그 국가의 문자는 괜찮습니다. C++ 표준을 지원하지만 컴파일러가 지원하지는 않습니다. 특히 g ++는 그렇지 않습니다.

  • 필요한 모든 헤더를 포함하십시오.

  • main에 대한 표준 준수 서명을 사용하십시오.

그리고 누락 된 return 문을 수정해야합니다.

디버깅을 시작할 수 있습니다!