2016-01-29 3 views
0

Я хочу, чтобы эта программа говорила, что если вы войдете в 1, на экране отобразится «да, G - это 1-я нота в аккорде G», если вы введете что-нибудь еще, оно напечатает «неправильно! " и затем вернитесь назад в начало, вот моя попытка. Кроме того, я знаю, что есть разные способы сделать это, но это для школьного задания, и необходим тип данных enum, хотя этот код далеко заходит только для отображения использования перечисления, это беспокоит меня, я не могу получить это работать. Любые указатели? (каламбур не предназначен).Simpe if and else in C programming

enum Gchord{G=1,B,D,}; 
int main(){ 
    printf("What interval is G in the G chord triad \nEnter 1 2 or 3\n"); 
    int note; 
    scanf("%i",&note);  

    if (note = 1){     
     printf ("Yes G is %ist note in the G-chord\n",G)}; 
    else(
     printf("no, wrong");  
    return(0):  
}; 
+2

ты дочитал о петлях еще? – Flikk

+1

вы назначаете 1 переменной «note» в вас, если условие. – khuderm

+0

Ключевая проблема: забудьте, что ваш компилятор полностью поддерживает свои предупреждения или получает новый компилятор. Хорошие компиляторы предупредили бы вас. Экономит ваше время. – chux

ответ

2

В коде есть много проблем, но главное, потому что вы пытаетесь назначить 1 на note вместо сравнения ==.

Другое дело, что вы никогда не проверяете ошибки scanf.

Скобки и скобки используются неправильно.

int main(){} shoudl be не менее int main(void){}.

return заявление должно быть не рассматривается как функция, нет необходимости в этих скобках вокруг (0) и должны заканчиваться semicol ;, а не с :.

Теперь следующий должен объяснить вам лучше, что вы, вероятно, пытались сделать:

#include<stdio.h> 

enum Gchord{G=1,B,D,}; 

int main(void){ 
    printf("What interval is G in the G chord triad \nEnter 1 2 or 3\n"); 
    int note; 

    if(scanf("%i",&note) == 1){ 
     if (note == 1){ 
      printf ("Yes G is %ist note in the G-chord\n",G); 
     }else{ 
      printf("no, wrong"); 
     } 
    }else{ 
     printf("Error, scanf\n"); 
    } 
    return 0; 
} 
4

note = 1 является назначение note со значением 1. Вы хотите сравнить note с 1 и поэтому вам нужен оператор ==. Читайте на операции сравнения здесь:

http://en.cppreference.com/w/cpp/language/operator_comparison

Чтобы быть кристально ясно:

note = 1; // Assigning note to 1, note is now the value 1 
note == 1; // Comparing note to 1, true if note is 1, false otherwise. 

У вас также есть много других проблем:

  • В printf ("Yes G is %ist note in the G-chord\n",G)}; строки заканчиваются точкой с запятой, если утверждений нет.
  • else( else does not принимает аргумент и должен использовать фигурные скобки. else {
  • return(0) Возврат не является функцией.

Ваш компилятор с предупреждениями по полной версии (-Wall) расскажет вам обо всех этих вещах. Вещи в приведенном выше списке должны были быть ошибками компилятора.

0

Там несметное число синтаксических ошибок здесь в том числе один каждый отметил, что нота = 1 присваивает значение 1 к переменной примечания вместо проверки на равенство. Вам нужен оператор == здесь.

Также вы на самом деле не используете перечисление, ваш учитель, вероятно, вас не пропустит.

Я немного изменил ваш код, чтобы немного больше использовать перечисление и сделать цикл, который вы ищете.

enum Gchord { EXIT, G, B, D, }; 
int main() 
{ 
    while (true) 
    { 
     printf("What interval is G in the G chord triad \nEnter 1, 2, 3, or 0 to exit\n"); 
     Gchord note; 
     scanf("%i", &note); 

     if(note == EXIT) 
      break; 

     if (note == G) 
      printf("Yes G is %ist note in the G-chord\n", G); 
     else 
      printf("no, wrong\n"); 
    } 

    return(0); 
}; 
+0

Пожалуйста, по крайней мере, проверьте 'scanf' за ошибки, если попытаетесь помочь. – Michi

+0

Проверка ошибок и проверка пули явно выходят за рамки вопроса оп. Простое и чистое более полезно, чем свернутое и пуленепробиваемое. – acid1789

+0

Это не имеет никакого отношения к OP здесь. Если вы дадите ответ, сделайте это правильно ..... если не оставить комментарий. – Michi

1
I don't know where to start. Your code has a lot of errors. 
  • Форматирование кода: это очень важно, чтобы узнать, как форматировать код так, становится легче читать.
  • int note; переменные почти всегда должны быть объявлены в начале, а также инициализирован (в данном случае с int note = 0;
  • Если вы отделяете что-то с , ввести пространство позади него. Не scanf("%i",&note); но scanf("%i", &note);
  • Для сравнения, если 2 значения равно, используйте == Одиночная = используется для присвоения значения переменной Wrong:.. if (note = 1) справа: if (note == 1)
  • вы используете неправильный кронштейн для else, что вы даже не близко
  • .
  • И для вашей проблемы с циклом, вы должны прочитать около while loops и спросить еще раз, если вы их не понимаете.

    enum Gchord{G=1,B,D,}; 
    
    int main() { 
        int note = 0; 
    
        printf("What interval is G in the G chord triad \nEnter 1 2 or 3\n");   
        scanf("%i", &note);  
        if (note == 1) {     
         printf ("Yes G is %ist note in the G-chord\n", G); 
        } 
        else { 
         printf("no, wrong"); 
        } 
        return 0;  
    }; 
    
+0

* много *, alot - это не слово: http://hyperboleandahalf.blogspot.com/2010/04/alot-is- better-than-you-at-everything.html –

+1

Вы не проверяете 'scanf' за ошибки. – Michi

+0

@ Michi i только сделал базовое форматирование кода и исправил ошибки синтаксиса, чтобы запустить его и показать, насколько важно иметь форматирование кода – Flikk