2015-01-31 2 views
-3

По сути, я хотел проверить этот код. Я попытался включить его в основную функцию, но не возвращался к вводу. Например, если вы ввели ноту в неправильной форме или начали с номера, у меня была инструкция if в коде, сообщающем пользователю ошибку ...Как использовать boolean для проверки моей функции?

Но он перешел ко второму входу вместо того, введите их заметку, но мне сказали, что мне нужно использовать логическое значение для проверки, но я на самом деле не знаю, как использовать логическое значение очень хорошо, поэтому объяснение того, как правильно связать его с функцией, было бы полезно, а также пару вопросов были (например, вопрос: .....)

Вопрос: Как я не могу повторить этот код для проверки басовых нот, который в этом случае равен notenameB?

bool validatenotename (string notenameM) 
    { 
     if (notenameM.length() != 2 && notenameM.length() != 3) 
     { 
      cout<<"invalid number of characters, note must be between 2 or 3 characters (example: A1 or C#2) : \n"; 
      return false; 
     } 
     else if (notenameM[0] != "a" && notenameM[0] != "b" && notenameM[0] != "c" && notenameM[0] != "d" && notenameM[0] != "e" && notenameM[0] != "f" && notenameM[0] != "g") 
     { 
      cout<<"First character of a note should be one of the following (A,B,C,D,E,F,G) \n"; 
      return false; 
     } 
     //question: here i want to enter an if statement making sure that when the user enters c#,d#,f#,g#,or a# it will only allow those notes to be 3 characters (the third being a number for octaves) and also the user cant put a b# or e#? 
     else if (
    } 
do 
{ 


cout << endl 
<< " 1) Melody.\n" 
<< " 2) Bass.\n" 
<< " 3) Playback Melody.\n" 
<< " 4) Playback Bass.\n" 
<< " 5) Exit.\n" 
<< " Choose one of the above and enter the corresponding number then press enter: "; 
cin >> choice; 

switch (choice) 
{ 
case 1: 

    { 
     string notenameM; 
     int numbernotesM; 
     float notelengthM; 
     string notename; 


     cout<<"Enter number of notes you want: "; 
     cin>>numbernotesM; 

     for(int i=0; i < numbernotesM; i++) 
     { 
      cout<<"Enter note"<<i+1<<": "; 
      cin>>notenameM; 


     } 


     for(int i=0; i < numbernotesM; i++) 
     { 
      cout<<"enter note length for "<<i+1<<": \n"; 
      cin>>notelengthM; 

     } 


    } 

break; 

case 2: 
    { 
     string notenameB; 
     int numbernotesB; 
     float notelengthB; 
     string notename; 

     cout<<"Enter number of notes you want: \n"; 
     cin>>numbernotesB; 

      for(int i=0; i < numbernotesB; i++) 
     { 
      cout<<"Enter note"<<i<<": \n"; 
     cin>>notenameB; 
     } 

     for(int i=0; i < numbernotesB; i++) 
     { 
      cout<<"enter note length for "<<i<<": \n"; 
      cin>>notelengthB; 
     } 
    } 
break; 
+3

Пожалуйста, удалите все ненужные коды перед публикацией здесь. –

+0

Я не совсем уверен, что не нужно, я думал, что я ставлю только то, что думал о важном коде? – kas

+0

Например, любой ввод кажется ненужным. Вы можете жестко закодировать значения, которые вы представляете пользователю для ввода. –

ответ

1

В следующем заявлении:

else if (notenameM[0] != "a" && notenameM[0] != "b" && notenameM[0] != "c" 
     && notenameM[0] != "d" && notenameM[0] != "e" && notenameM[0] != "f" 
     && notenameM[0] != "g") 

notenameM[0] это просто символ, который вы пытаетесь сравнить со строкой "a" фактически то есть строка с дополнительным нулевым терминатором как | a | \0 | хранится в памяти. Измените их все как 'a'.

+0

мой код продолжает появляться с ошибкой, я еще не решил ошибку c2040: '! =: Int отличается в уровнях косвенности от' cont char [2] 'whats that? – kas

+0

Что такое cont? Вы имеете в виду const? –

+0

@kas Я предполагаю, что вы делаете неправильные операции сравнения со строковыми литералами в двойных кавычках вместо символов с одинарными кавычками. –

Смежные вопросы