2013-03-02 5 views
0

이 프로그램을 고칠 수 있습니까? 그것은 말할 수 없습니다.do do not do do do do do do do this program.이 프로그램을 수리 해 주실 수 있습니까?

int main() 
{ 
    using namespace std; 
    int x, y, z, a; 
    cout << "Please enter a number" << endl; 
    cin >> x; 
    cout << "Please enter another number" << endl; 
    cin >> y; 
    cout << "What do you want to do with these numbers?" << endl; 
    cout << "1 = +" << endl; 
    cout << "2 = -" << endl; 
    cout << "3 = *" << endl; 
    cout << "4 = /" << endl; 
    cin >> a; 

    do { 
     z = add(x, y); 
    } while (a == 1); 

    do { 
     z = sub(x, y); 
    } while (a == 2); 

    do { 
     z = mul(x, y); 
    } while (a == 3); 

    do { 
     z = dis(x, y); 
    } while (a == 4); 

    cout << z; 
    return 0; 
} 

do while 문을 사용해 보았지만 제대로 작동하지 않습니다. --- EDIT --- 추가 된 들여 쓰기가 추가되었는데, 왜 그렇게 분무합니까?

+0

이 유 – PSR

+0

@PSR 허을 wwitch 사용할 수 있습니다 [괄호는 단순히 명확성을 위해, 당신은 괄호의 두 개의 내부 세트를 제거 할 수 있습니다]? 난 이해가 안 돼요. 자세한 내용을 입력하십시오. – Lemonizer

+2

루프가 'a'를 수정하지 않습니다. 따라서 루프 중 하나에 들어가면 절대 빠져 나올 수 없습니다. – Barmar

답변

2

당신은 그 입력하려고 입력 어느 옵션이 할-while 루프 결코 종료 때문에 조건은 항상 만족 될 것입니다. 전의. 내가 1을 입력하면

do { 
    z = add(x, y); 
} while (a == 1); 

이 표시되고 a는 항상 1이므로 종료하지 않습니다. 다른 조건에서도 마찬가지입니다. 대신 switch 문을 사용할 수 있습니다. 예 :

switch(a) { 
    case 1 : z = add(x, y); 
      break; 
    case 2 : z = sub(x, y); 
      break; 
    case 3 : z = mul(x, y); 
      break; 
    case 4 : z = div(x, y); 
      break; 
    default : cout<<"Please choose a valid option to proceed."; 
} 
cout << z; 
return 0; 

또한 이러한 경우 do-while을 사용하지 마십시오. 루프를 빠져 나가더라도 do-while은 들어 와서 조건을 하위 순차적으로 확인하기 때문에 항상 (x, y)로 나뉩니다. 당신은 그러나이 같은 while 루프 뭔가를 사용할 수 있습니다

while(a==1) { 
    z = add(x, y); 
    a = -1; 
} 

while(a==2) { 
    z = sub(x, y); 
    a = -1; 
} 

while(a==3) { 
    z = mul(x, y); 
    a = -1; 
} 

while(a==4) { 
    z = div(x, y); 
    a = -1; 
} 
+0

감사합니다! 이 switch 문은 매우 좋습니다. 나는 그것을 조금만 가지고 놀 것이다. 또한 div (x, y)를 사용했는데 div를 사용할 수 없으므로 dis 만 사용하도록 허용되었습니다. 그래서 내 코드에서, dis (x, y). 이 원인은 무엇입니까? div 바쁜 거요? – Lemonizer

+0

그것은 오타되었습니다 :) pls 수 있습니다. ans에 표시하십시오. 문제가 해결되면 올바른 것으로 표시 하시겠습니까? tnks. – lokoko

-1
귀하의 코드가 무한 루프에 진입

, 그래서

int main() 
{ 
using namespace std; 
int x, y, z, a; 
do 
{ 
cout << "Please enter a number" << endl; 
cin >> x; 
cout << "Please enter another number" << endl; 
cin >> y; 
cout << "What do you want to do with these numbers?" << endl; 
cout << "1 = +" << endl; 
cout << "2 = -" << endl; 
cout << "3 = *" << endl; 
cout << "4 = /" << endl; 
cin >> a; 
switch(a) 
{ 
    case 1: 
    z = add(x, y); 
    break; 
    case 2: 
    z = sub(x, y); 
    break; 
    case 3: 
    z = mul(x, y); 
    break; 
    case 4: 
    z = dis(x, y); 
    break; 
} 
cout << z; 
} while(1 >= a <= 4) 
return 0; 
} 

lokoko의 제안에 따라 수정처럼 수정

+1

if 문이 너무 많이 필요하지 않습니다. 스위치 케이스가있는 이유. – lokoko

+0

답장을 보내 주셔서 감사합니다. 그것은 나를 도와 줬지만, 실제로 사용하고 싶다면 do while 문을 사용하는 방법이 있습니까? – Lemonizer

+0

이전 코드를 유지하고 무한 루프를 피하려면이 코드를 사용하십시오. do { z = add (x, y); a = 5; } while (a == 1); – Premsuraj

0

문 :

while(1 >= a <= 4) 

는 [잘못 아니라, 그것은 올바른 C 구문이다, 그러나 않기 때문에 그것은 당신이 원하는 것을 가장 가능성이 아니에요 ] :

while((1 >= a) <= 4); 

그리고 (1 >= a)의 결과 중 하나 0 또는 1 때문에

는 항상 <= 4입니다. 당신은 할 필요가 :

while ((1 >= a) && (a <= 4));