一只程序猫 发表于 2020-3-18 11:38:50

一个题目,不知道哪里错了

/*
2020年3月18日10:42:54
Aim at: do tasks
task: 会唱歌的键盘 具体看程序
*/

#include <stdio.h>
#include <windows.h>

const double B =1.0594631;//定义双精度实型变量 B 为两个音程频率相差的倍数

int main (void)
{
        double c11,d12,e13,f14,g15,a16,b17,c21;//定义音名实型变量
        char k =0;

        c11=440;//定义中央 c 的频率
        d12=c11*B*B;
        e13=d12*B*B;
        f14=e13*B;
        g15=f14*B*B;
        a16=g15*B*B;
        b17=a16*B*B;
        c21=b17*B;
        printf("请按键盘上的~中的数字演奏1-2-3的乐曲\n");
        printf("按Ese键结束\n");
       
        while(k !=27)
        {
                int getch();
                k =getch();
                putchar(k);//输出 k 的值
                switch(k)
                        {
                                case 1:Beep((DWORD)c11,300);
                                case 2:Beep((DWORD)d12,300);
                                case 3:Beep((DWORD)e13,300);
                                case 4:Beep((DWORD)f14,300);
                                case 5:Beep((DWORD)g15,300);
                                case 6:Beep((DWORD)a16,300);
                                case 7:Beep((DWORD)b17,300);
                                case 8:Beep((DWORD)c21,300);       
                        }       
        }       
        return 0;
}

执行后编译器报错如下:
C:\Users\ADMINI~1\AppData\Local\Temp\cczl78qL.o        演奏音乐.cpp:(.text+0x12f): undefined reference to `getch()'
E:\c\collect2.exe        ld returned 1 exit status

sunrise085 发表于 2020-3-18 12:08:47

getch()函数,你只声明了,但是没有定义,所以调用的时候就出错了

一只程序猫 发表于 2020-3-18 12:33:44

sunrise085 发表于 2020-3-18 12:08
getch()函数,你只声明了,但是没有定义,所以调用的时候就出错了

谢谢,怎么定义?

sunrise085 发表于 2020-3-18 12:41:22

一只程序猫 发表于 2020-3-18 12:33
谢谢,怎么定义?

我不知道你这个函数打算完成什么功能。

不过看了你的程序,估计你是打算读取一个字符吧?
那样的话不用你自己写函数,直接用getchar()就可以了。
把30行的int getch()删掉,31行改为k=getchar()就行了
putchar()和getchar()是一对函数,前者是输出一个字符,后者是读取一个字符。
不过getchar()读取的是char型而不是int型,你需要把switch语句块中的各个case都改为字符,例如:case 1改为case '1'

一只程序猫 发表于 2020-3-18 12:51:02

sunrise085 发表于 2020-3-18 12:41
我不知道你这个函数打算完成什么功能。

不过看了你的程序,估计你是打算读取一个字符吧?


非常感谢,确实是那里的错误!

一只程序猫 发表于 2020-3-18 12:52:53

/*
2020年3月18日10:42:54
Aim at: do tasks
task: 会唱歌的键盘 具体看程序
*/


#include <stdio.h>
#include <windows.h>

const double B =1.0594631;//定义双精度实型变量 B 为两个音程频率相差的倍数

int main (void)
{
        double c11,d12,e13,f14,g15,a16,b17,c21;//定义音名实型变量
        char k =0;

        c11=440;//定义中央 c 的频率
        d12=c11*B*B;
        e13=d12*B*B;
        f14=e13*B;
        g15=f14*B*B;
        a16=g15*B*B;
        b17=a16*B*B;
        c21=b17*B;
        printf("请按键盘上的~中的数字演奏1-2-3的乐曲\n");
        printf("按Ese键结束\n");
       
        while(k !=27)
        {
                k =getchar();
                switch(k)
                        {
                                case '1':Beep((DWORD)c11,300);break;
                                case '2':Beep((DWORD)d12,300);break;
                                case '3':Beep((DWORD)e13,300);break;
                                case '4':Beep((DWORD)f14,300);break;
                                case '5':Beep((DWORD)g15,300);break;
                                case '6':Beep((DWORD)a16,300);break;
                                case '7':Beep((DWORD)b17,300);break;
                                case '8':Beep((DWORD)c21,300);break;
                        }       
        }       
        return 0;
}


改正之后
页: [1]
查看完整版本: 一个题目,不知道哪里错了