基于用户输入的结束循环

时间:2015-03-26 04:58:38

标签: c function loops midi

我的程序接受来自用户的号码以确定正在记录的序列的长度。我如何获取该数字,并让它确定执行此循环的次数。虽然(true)显然不允许循环结束。

提前致谢

这是从midi输入合成声音的功能

void midisound (int note)
    {
        int velocity;
        int playingNote = -1;
        float frequency;

        while(true)
        {
            note = aserveGetNote();
            velocity = aserveGetVelocity();

            if(velocity > 0)
            {
                frequency = 440 * pow(2, (note-69) / 12.0);
                aserveOscillator(0, frequency, 1.0, 0);
                playingNote = note;
            }
            else if(note == playingNote)
            {
                aserveOscillator(0, 0, 0, 0);
            }

        }


    }

---here is where function ^ is called in the program----

   if (reclayer == 1)
                    {
                        //open first text file for layer 1 to be written to
                        textFilePointer = fopen("recording1.txt", "w+");
                        if(textFilePointer == NULL)
                        {
                            printf("Error Opening File!");
                        }
                        else
                        {

                            //function call to write notes and vel data
                            notetofile(input, seqlen, reclayer);
                            printf("Would you like to record a second layer or re-record? (y or n)\n");
                            scanf(" %c", &choice2);
                        }

                    }

4 个答案:

答案 0 :(得分:0)

使用for循环。

for ( i = 0; i < note; i++ ) {
    // Your code here
}

这将执行&#39;注意&#39;次数。

答案 1 :(得分:0)

使用可以使用scanf()功能从控制台输入用户编号:

void midisound (int note) {
    int input;
    int velocity;
    int playingNote = -1;
    float frequency;

    printf("Enter integer number of times to loop: ");
    scanf("%d", &input);

    while(input > 0) {
        input = input - 1;
        note = aserveGetNote();
        velocity = aserveGetVelocity();

        if(velocity > 0) {
            frequency = 440 * pow(2, (note-69) / 12.0);
            aserveOscillator(0, frequency, 1.0, 0);
            playingNote = note;

        } else if(note == playingNote) {
            aserveOscillator(0, 0, 0, 0);
        }
    }
}

答案 2 :(得分:0)

在第一次获取时,从用户编号的时间循环输入的数字将运行使用

for(i = 0; i&lt; max; i ++)

答案 3 :(得分:0)

首先指定一个变量,该变量包含您想要重复它的次数。例如,我们来看int n = 5;。 (您也可以通过调用n让用户输入scanf( "%d " , &n );的值(因为这就是您所要求的),然后进行其余操作)

int n ;
scanf( "%d " , &n );

您可以将此作为我以下所有案例的通用

然后,只需添加一个简单的for循环,例如

int i;
for ( i = 0 ; i < n ; i++ )
  {
     // The code that you want to repeat
  }

这应该可以解决问题。

如果你想使用while循环,那么像以前一样,让n成为循环必须执行的次数。然后

int i=0;
while ( i < n )
  {
     // Your code
     i++;
  }

您也可以使用while ( true )循环,但您只需提供条件并使用break;。让我们举个例子。

int i=0;
while ( true )
  {
     // your code
     i++;
     if ( i == n )
        break;
  }

这些只是许多不同的可能性。如果你尝试,你甚至可以提出自己的条件。

快乐的编码.... 8 - )