鱼C论坛

 找回密码
 立即注册
查看: 767|回复: 5

[已解决]一个题目,不知道哪里错了

[复制链接]
发表于 2020-3-18 11:38:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

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

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

  13.         c11=440;//定义中央 c 的频率
  14.         d12=c11*B*B;
  15.         e13=d12*B*B;
  16.         f14=e13*B;
  17.         g15=f14*B*B;
  18.         a16=g15*B*B;  
  19.         b17=a16*B*B;
  20.         c21=b17*B;
  21.         printf("请按键盘上的~中的数字演奏1-2-3的乐曲\n");
  22.         printf("按Ese键结束\n");
  23.        
  24.         while(k !=27)
  25.         {
  26.                 int getch();
  27.                 k =getch();
  28.                 putchar(k);//输出 k 的值
  29.                 switch(k)
  30.                         {
  31.                                 case 1:Beep((DWORD)c11,300);
  32.                                 case 2:Beep((DWORD)d12,300);
  33.                                 case 3:Beep((DWORD)e13,300);
  34.                                 case 4:Beep((DWORD)f14,300);
  35.                                 case 5:Beep((DWORD)g15,300);
  36.                                 case 6:Beep((DWORD)a16,300);
  37.                                 case 7:Beep((DWORD)b17,300);
  38.                                 case 8:Beep((DWORD)c21,300);       
  39.                         }       
  40.         }       
  41.         return 0;
  42. }
复制代码


执行后编译器报错如下:
C:\Users\ADMINI~1\AppData\Local\Temp\cczl78qL.o        演奏音乐.cpp:(.text+0x12f): undefined reference to `getch()'
E:\c\collect2.exe        [Error] ld returned 1 exit status
最佳答案
2020-3-18 12:41:22

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

不过看了你的程序,估计你是打算读取一个字符吧?
那样的话不用你自己写函数,直接用getchar()就可以了。
把30行的int getch()删掉,31行改为k=getchar()就行了
putchar()和getchar()是一对函数,前者是输出一个字符,后者是读取一个字符。
不过getchar()读取的是char型而不是int型,你需要把switch语句块中的各个case都改为字符,例如:case 1改为case '1'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-18 12:08:47 | 显示全部楼层
getch()函数,你只声明了,但是没有定义,所以调用的时候就出错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-18 12:33:44 | 显示全部楼层
sunrise085 发表于 2020-3-18 12:08
getch()函数,你只声明了,但是没有定义,所以调用的时候就出错了

谢谢,怎么定义?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 12:41:22 | 显示全部楼层    本楼为最佳答案   

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

不过看了你的程序,估计你是打算读取一个字符吧?
那样的话不用你自己写函数,直接用getchar()就可以了。
把30行的int getch()删掉,31行改为k=getchar()就行了
putchar()和getchar()是一对函数,前者是输出一个字符,后者是读取一个字符。
不过getchar()读取的是char型而不是int型,你需要把switch语句块中的各个case都改为字符,例如:case 1改为case '1'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-3-18 12:51:02 | 显示全部楼层
sunrise085 发表于 2020-3-18 12:41
我不知道你这个函数打算完成什么功能。

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

非常感谢,确实是那里的错误!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-18 12:52:53 | 显示全部楼层
  1. /*
  2. 2020年3月18日10:42:54
  3. Aim at: do tasks
  4. task: 会唱歌的键盘 具体看程序
  5. */


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

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

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

  13.         c11=440;//定义中央 c 的频率
  14.         d12=c11*B*B;
  15.         e13=d12*B*B;
  16.         f14=e13*B;
  17.         g15=f14*B*B;
  18.         a16=g15*B*B;  
  19.         b17=a16*B*B;
  20.         c21=b17*B;
  21.         printf("请按键盘上的~中的数字演奏1-2-3的乐曲\n");
  22.         printf("按Ese键结束\n");
  23.        
  24.         while(k !=27)
  25.         {
  26.                 k =getchar();
  27.                 switch(k)
  28.                         {
  29.                                 case '1':Beep((DWORD)c11,300);break;
  30.                                 case '2':Beep((DWORD)d12,300);break;
  31.                                 case '3':Beep((DWORD)e13,300);break;
  32.                                 case '4':Beep((DWORD)f14,300);break;
  33.                                 case '5':Beep((DWORD)g15,300);break;
  34.                                 case '6':Beep((DWORD)a16,300);break;
  35.                                 case '7':Beep((DWORD)b17,300);break;
  36.                                 case '8':Beep((DWORD)c21,300);break;
  37.                         }       
  38.         }       
  39.         return 0;
  40. }
复制代码


改正之后
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-2 18:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表