鱼C论坛

 找回密码
 立即注册
查看: 3125|回复: 8

[已解决]常量作业

[复制链接]
发表于 2022-3-19 15:05:08 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>

#define r 5
#define S(r) "2*3.14*r*r"
#define C(r) "2*3.14*r"

int main()
{
    const char* NL="\n";

    printf("Line1%s",NL);
    printf("Line2%s",NL);
    printf("半径为%d的圆\n",r);
    printf("面积是:%4.2f\n",S(r));
    printf("周长是:%4.2f\n",C(r));

    return 0;
}

输出
常量-作业.c:26:34: warning: format specifies type 'double' but the argument has type 'char *' [-Wformat]
    printf("面积是:%4.2f\n",S(r));
                    ~~~~~    ^~~~
                    %4.2s
常量-作业.c:16:14: note: expanded from macro 'S'
#define S(r) "2*3.14*r*r"
             ^~~~~~~~~~~~
常量-作业.c:27:34: warning: format specifies type 'double' but the argument has type 'char *' [-Wformat]
    printf("周长是:%4.2f\n",C(r));
                    ~~~~~    ^~~~
                    %4.2s
常量-作业.c:17:14: note: expanded from macro 'C'
#define C(r) "2*3.14*r"
             ^~~~~~~~~~
2 warnings generated.

该怎么改
最佳答案
2022-3-19 15:06:08

  1. #include <stdio.h>

  2. #define r 5
  3. #define S(r) 2*3.14*r*r           // 把双引号去掉
  4. #define C(r) 2*3.14*r            // 把双引号去掉

  5. int main()
  6. {
  7.     const char* NL="\n";

  8.     printf("Line1%s",NL);
  9.     printf("Line2%s",NL);
  10.     printf("半径为%d的圆\n",r);
  11.     printf("面积是:%4.2f\n",S(r));
  12.     printf("周长是:%4.2f\n",C(r));

  13.     return 0;
  14. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-19 15:06:08 | 显示全部楼层    本楼为最佳答案   

  1. #include <stdio.h>

  2. #define r 5
  3. #define S(r) 2*3.14*r*r           // 把双引号去掉
  4. #define C(r) 2*3.14*r            // 把双引号去掉

  5. int main()
  6. {
  7.     const char* NL="\n";

  8.     printf("Line1%s",NL);
  9.     printf("Line2%s",NL);
  10.     printf("半径为%d的圆\n",r);
  11.     printf("面积是:%4.2f\n",S(r));
  12.     printf("周长是:%4.2f\n",C(r));

  13.     return 0;
  14. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-19 15:07:26 | 显示全部楼层
  1. #include <stdio.h>

  2. #define r 5

  3. // 去掉字符串
  4. #define S(r) 2 * 3.14 * r *r
  5. #define C(r) 2 * 3.14 * r

  6. int main()
  7. {
  8.     const char *NL = "\n";

  9.     printf("Line1%s", NL);
  10.     printf("Line2%s", NL);
  11.     printf("半径为%d的圆\n", r);
  12.     printf("面积是:%4.2f\n", S(r));
  13.     printf("周长是:%4.2f\n", C(r));

  14.     return 0;
  15. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-19 15:10:26 | 显示全部楼层

楼市要快一点,也谢谢你呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-19 15:14:18 | 显示全部楼层

#include <stdio.h>


#define S(r) 3.14159*r*r


int main()
{
    const char* NL="\n";
    const double C(r)=2*3.1415*r;
    int r=5;

    printf("Line1%s",NL);
    printf("Line2%s",NL);
    printf("半径为%d的圆\n",r);
    printf("面积是:%4.2f\n",S(r));
    printf("周长是:%4.2f\n",C(r));

    return 0;
}

输出
常量-作业.c:22:20: error: a parameter list without types is only allowed in a function definition
    const double C(r)=2*3.1415*r;
                   ^
常量-作业.c:22:32: error: use of undeclared identifier 'r'
    const double C(r)=2*3.1415*r;
                               ^
2 errors generated.

问:想用const该怎么定义
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-19 15:16:30 | 显示全部楼层

首先,你就算是声明函数也不能把返回值声明为常量,

然后,你这个是定义宏,只能用 #define
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-19 15:21:56 | 显示全部楼层
isdkz 发表于 2022-3-19 15:16
首先,你就算是声明函数也不能把返回值声明为常量,

然后,你这个是定义宏,只能用 #define

那如何用const定义函数呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-19 15:23:11 | 显示全部楼层
Weabu 发表于 2022-3-19 15:21
那如何用const定义函数呢

const 是定义常量的,不能用来定义函数,

因为函数的返回值不能为常量
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-19 15:24:24 | 显示全部楼层
isdkz 发表于 2022-3-19 15:23
const 是定义常量的,不能用来定义函数,

因为函数的返回值不能为常量

好的
谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-24 19:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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