在C编程中使用Simpe等等

时间:2016-01-29 21:44:50

标签: c if-statement

我想让这个程序说如果输入1,屏幕将显示"是G是G和弦中的第一个音符",如果你输入任何其他内容,它将打印"错误!"然后循环回到开头,这是我的尝试。另外,我知道有不同的方法可以做到这一点,但它是为了学校作业而且enum数据类型是必要的,虽然这个代码对于仅仅显示enum的使用是很有影响的,但是我无法理解它让这个工作。有什么指针吗? (没有双关语)。

c <- function(w, A, B) sum((w[1] * A - w[2] * B)^2)
optim(w, c, A = A, B = B)

4 个答案:

答案 0 :(得分:4)

note = 1正在为note分配值1。您希望将note1进行比较,因此您需要运算符==。阅读比较操作:

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 )};行以分号结尾,if语句不是。
  • else(否则不会采用参数,应该使用大括号。 else {
  • return(0)返回不是函数。

完整(-Wall)警告的编译器将告诉您所有这些事情。上面列表中的内容应该是编译器错误。

答案 1 :(得分:2)

您的代码中存在很多问题,但主要原因是您尝试将1分配给note而不是比较==

另一件事是你永远不会检查scanf是否有错误。

括号和括号使用错误。

int main(){}至少要int main(void){}

return语句不应被视为一个函数,(0)周围不需要这些括号,并且应该以分号;而不是:结尾

现在,以下内容应该更好地解释您可能尝试做的事情:

#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;
}

答案 2 :(得分: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个值是否相等,请使用==。单个=用于为变量赋值。错误: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;       
    };
    

答案 3 :(得分:0)

这里有无数的语法错误,包括每个人都指出note = 1为note变量赋值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);
};