2017-03-29 3 views
0

이 프로그램은 지금까지 주파수 범위 0-20000 Hz를 스윕하고 화면에 50 Hz마다 인쇄 한 다음 도달하면 멈 춥니 다 20000 Hz. 또한 화면의 미디 키보드에서 컨트롤을 움직이면 중지됩니다.C 프로그래밍에서 Do-While 루프를 만들어 사용자가 프로그램을 다시 실행하길 원한다면

이제는 2000Hz에 이르렀을 때 멈추지 않고 "이 프로그램을 다시 시작 하시겠습니까?"와 같은 옵션을 사용자에게 제공하도록 수정하려고합니다. 사용자가 'Y'를 입력하면 다시 시작되지만 사용자가 'N'을 입력하면 프로그램이 중지됩니다. 나는 do while이 내가 찾고있는 것이라고 믿지만, 시도해 보았고 제대로 작동하지 않는 것처럼 보입니다.

내 코드 :

#include "aservelibs/aservelib.h" 
#include <stdio.h> 
#include <math.h> 

int main() 
{ 
    int frequency = 0.0; 
    int modulation = aserveGetControl(1); 

    printf("aserve get note control is %d\n", modulation); 

    do 
    { 
     while(frequency < 20000.0 && modulation == 0) 
     { 
      modulation = aserveGetControl(1); 
      aserveOscillator(0,frequency,1.0,0); 
      printf("The frequency is: %dHz\n", frequency); 
      frequency = frequency + 50.0; 
      aserveSleep(20); 
     } 

     char userInput; 
     printf("enter 'y' if you would like to repeat: "); 
     scanf(" %c", &userInput); 
     while(userInput == 'y'); 
    } 

    return(0); 
} 
+1

입력을 수집하고 Y/N을 반환하는 부분은 포함시키지 말고 루프를 시도하십시오. 솔직히 말하면 루프에서 수행하는 작업은 기본적으로 부적합한 작업입니다. – BugFinder

+0

그래, 그냥 작동하지 않았기 때문에 ive 제거, 질문은 내가 어떻게 할 수 있는지 묻습니다. –

+0

음, 이미 while 회 돌이를 가지고 있으므로 while 회 돌이의 기초가 있습니다. 실제 작업 루프가 아닌 작업을 시작하는 것이 더 쉬울 것입니다. – BugFinder

답변

3

귀하의 개념은 정확하지만 그냥 do while 루프의 구문을 놓쳤다.

그것은

do { 

} while(condition); 

그래서, 수정 된 코드는 매우 처음

#include "aservelibs/aservelib.h" 
#include <stdio.h> 
#include <math.h> 

int main() 
{ 
    int frequency = 0.0; 
    int modulation = aserveGetControl(1); 
    printf("aserve get note control is %d\n", modulation); 
    char userInput; 

    do 
    { 
     while(frequency < 20000.0 && modulation == 0) 
     { 
      modulation = aserveGetControl(1); 
      aserveOscillator(0,frequency,1.0,0); 
      printf("The frequency is: %dHz\n", frequency); 
      frequency = frequency + 50.0; 
      aserveSleep(20); 
     } 

     printf("enter 'y' if you would like to repeat: "); 
     scanf(" %c", &userInput); 
    } while(userInput == 'y'); 

    return(0); 
} 
3

될 것입니다해야합니다, 당신은 구문 오류가 다음 while 절은 루프 본체의 외부에 배치되어야한다 :

do 
{ 
} 
while(someCondition); // here! 

루프 본문 내에 정의 된 변수는 외부에서 액세스 할 수 없습니다. f를 - 그래서 그들을 전에 선언해야합니다 :

그 외에도 귀하의 코드는 잘 작동합니다.

+0

도움을 주셔서 감사합니다. 그 일을하지만 그것은 루프가 시작되기 전에 주파수의 값이 20000보다 크지 않은지 묻는 것입니다. 그래서 사용자가 나중에 스윕을 청취 할 수 있도록 묻습니다. –

+0

@ArchieWillis 아마도 '주파수'와 '변조'의 값을 재설정하겠습니까? –

+0

예, 성공했습니다 !! 정말 고마워!! 다른 사람들이 당신의 도움을 요청합니다! –