2017-03-29 1 views
0

Dieses Programm durchläuft bisher den Frequenzbereich 0-20000 Hz und druckt alle 50 Hz auf dem Bildschirm und stoppt dann, wenn es erreicht wird 20000 Hz. Es stoppt auch, wenn ich ein Steuerelement auf einer Bildschirm-Midi-Tastatur verschiebe.In C-Programmierung machen Sie eine Do-While-Schleife, um den Benutzer zu fragen, ob das Programm erneut ausgeführt werden soll

Nun, was ich versuche, ist es zu ändern, so dass, wenn es 2000 Hz erreicht hat, statt zu stoppen, gibt das Programm dem Benutzer eine Option, etwa wie "Möchten Sie dieses Programm erneut starten?" , und wenn der Benutzer 'Y' eingibt, wird es erneut gestartet, aber wenn der Benutzer 'N' eingibt, wird das Programm angehalten. Ich glaube ein do while ist, was ich suche, aber ich habe versucht und kann einfach nicht scheinen, es zur Arbeit zu bringen.

Mein Code:

#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

Sie haben nicht den Teil enthalten, wo Sie Eingabe sammeln und Y/N zurückgeben .. und versuchen Sie die Schleife .. um ehrlich zu sein, was Sie in der Schleife tun, ist im Grunde irrelevant. – BugFinder

+0

yeah ive entfernt das, weil es überhaupt nicht funktionierte, ist die Frage, wie ich das tun kann. –

+0

Nun, Sie haben bereits eine while-Schleife, also haben Sie die Grundlagen einer while-Schleife - es wäre einfacher, mit Ihrer nicht wirklich funktionierenden Schleife zu beginnen und zu beheben. – BugFinder

Antwort

3

Ihr Konzept ist richtig, aber Sie haben gerade verpasst die Syntax von do while Schleife.

Es sollte

do { 

} while(condition); 

So modifizierte Code

#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

auf den ersten sein, haben Sie einen Syntaxfehler: Die while Klausel außerhalb des Schleifenkörpers angeordnet werden muss:

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

Innerhalb des Schleifenkörpers definierte Variablen sind außerhalb von o nicht zugänglich f es - also müssen Sie sie vorher deklarieren:

char userInput; 
do 
{ 
} 
while(userInput == 'y'); 

Abgesehen davon sollte Ihr Code gut funktionieren.

+0

vielen Dank für Ihre Hilfe! das hat funktioniert, aber es fragt nur bevor die Schleife startet und nicht nachdem der Wert der Frequenz größer als 20000 ist. Also versuche ich es so zu machen, dass es danach fragt, damit der Benutzer die Option hat, den Sweep wieder zu hören. –

+0

@ArchieWillis Vielleicht den Wert von 'frequency' und' modulation' zurücksetzen? –

+0

ja das hat funktioniert !! vielen Dank!! und alle anderen für deine Hilfe! –

Verwandte Themen