我必须编写一个程序,其中main调用其他函数来测试一系列数字(如果有的话)是否少于一个数字,如果所有系列的数字都在两个限制之间,如果有的话是负数。我的代码返回值为1表示true,0表示false表示,但是赋值会将它们打印为"true"或"false"。我不知道如何将bool答案从printf打印为字符串。我使用if(atl == false)printf("false");在我的at_least.c和main.c中,它只返回一个true或false的长字符串(例如:truetruetrue ....)。我不确定这是不是正确的编码,我把它放在错误的位置,或者我需要使用其他一些代码。

这是我的main.c:

#include"my.h"

int main (void)

{

int     x;

int     count    = 0;

int     sum      = 0;

double  average  = 0.0;

int     largest  = INT_MIN;

int     smallest = INT_MAX;

bool    atlst    = false;

bool    bet      = true;

bool    neg      = false;

int     end;

while ((end = scanf("%d",&x)) != EOF)

{

sumall(x, &sum);                           //calling function sumall

count++;

larger_smaller(x, &largest, &smallest);    //calling function larger_smaller

if (atlst == false)

at_least(x, &atlst);                    //calling function at_least if x < 50

if (bet == true)

between(x, &bet);                       //calling function between if x is between 30 and 40 (inclusive)

if (neg == false)

negative(x, &neg);                      //calling function negative if x < 0

}

average = (double) sum / count;

print(count, sum, average, largest, smallest, atlst, bet, neg);

return;

}

我对一组数字的结果:

The number of integers is:           15

The sum is               :         3844

The average is           :       256.27

The largest is           :          987

The smallest is          :          -28

At least one is <  50    :            1     //This needs to be true

All between  30 and  40  :            0     //This needs to be false

At least one is negative :            1     //This needs to be true

这是在C中,我似乎找不到多少。

在此先感谢您的帮助!

附录:

从下面的答案重复这一点。

这适用于at_least和negative函数,但不适用于between函数。我有

void between(int x, bool* bet)

{

if (x >= LOWER && x <= UPPER)

*bet = false;

return;

}

作为我的代码。我不确定是什么问题。

只是旁注,x == true在布尔表达式中是多余的; 你可以说x。 同样,x == false只是!x。

可能重复什么是bool的printf格式说明符?

备用无分支版本:

"false\0true"+6*x

虽然很难读。但不错的解决方案。

具有自记录名称(例如bool2str)的内联函数或宏将解决该问题。

确实如此。 :)

很抱歉再次提出这个古老的问题,但我想我会说我喜欢这个解决方案,但是宏不会工作,除非x被转换为一个只能是1或0的BOOL。这个带我一分钟搞清楚。

@JoshTheGeek:是的,我并不是故意将它逐字复制到一个宏。您需要进行一些更改,如正确的括号和将值折叠为0/1。 ("false\0true"+6*!!(x))可能是最干净的方式。

这实际上是做什么的?你能为我们这些学习c的人提供一些细节吗,他们偶然发现了这个答案吗?

此代码经过混淆,不兼容Unicode。对于我正在尝试教授如何编写可维护代码的初级工程师,我会把它作为反模式。当然它不会通过代码审查。

@ ArchaeaSoftware:我不知道你的意思是"不兼容Unicode"。 char字符串唯一可能的Unicode表示形式是UTF-8。但即使你确实有一个wchar_t字符串(L前缀),代码仍然有效,因为指针添加是根据数组元素而不是字节。您的评论表明缺乏对C语言的理解。

我理解C语言就好了。我也理解维护程序员能够以最少的头脑划痕来理解代码的含义的重要性。你的答案(令人惊讶地得到了13个赞成票)和评论表明对软件工程缺乏了解。

@WilliamEverett:表达式"false\0true"实际上计算为const char*指向程序内存中的特定字符串。如果x为1(真),则+6*x向该指针添加6;如果x为0(假),则为0。如果向指针添加0,printf将开始在'f'处读取,并在到达'\0'(空终止字符)时停止读取。如果添加6,则printf将开始读取't'并在字符串自然终止时停止读取。但是,如果x不是0或1,则构造将失败,因此如果不能保证它,则需要@ R的修复。

@R:内联函数或带有自我记录名称的宏会有所帮助,但我担心人们仍会对构造感到非常困惑。解释伎俩背后的机制的评论也是合适的。

这是邪恶的酷。 Clang给了我一个警告"警告:在字符串中添加'int'不会附加到字符串[-Wstring-plus-int]"。而不是使用二进制加运算符,这可能会让人误以为他们正在使用隐式类型转换正确执行字符串连接。将代码编写为&"false\0true"[6 * x]会使编译器处于安装状态。

这可以进行优化以避免mul并使用shift(这仍然是大多数cpus /平台上的相关优化):"false\0\0\0true"+8*x

您可以使用C的条件(或三元)运算符:

(a > b) ?"True" :"False";

或者在你的情况下:

x ?"True" :"False" ;

这适用于at_least和negative函数,但不适用于between函数。我有void between(int x, bool* bet) { if (x >= LOWER && x <= UPPER) *bet = false; return; }作为我的代码。我不确定是什么问题。

x ?"true" :"false"

上面的表达式返回一个char *,因此您可以像这样使用:

puts(x ?"true" :"false");

要么

printf(" ... %s ...", x ?"true" :"false");

你可能想为此制作一个宏。

从技术上讲,它是一个const char*,而不是char*(虽然从前者到后者的转换已经弃用),但这与此无关。

当内联函数可以完成工作时,创建宏是没有意义的。

不,它是char *。这是C而不是C ++。

那么这个怎么样:

#include

#define BOOL_FMT(bool_expr)"%s=%s

", #bool_expr, (bool_expr) ?"true" :"false"

int main(int iArgC, char ** ppszArgV)

{

int x = 0;

printf(BOOL_FMT(x));

int y = 1;

printf(BOOL_FMT(y));

return 0;

}

这打印出以下内容:

x=false

y=true

使用类型为bool但int应该以相同的方式工作。

您可能希望将printf调用添加到宏中。虽然由于逗号运算符的工作原理,您可以使用额外的括号来执行puts((BOOL_FMT(1)))之类的操作来打印true。

c语言输出bool,关于printf:在c中打印bool结果为’false’或’true’的最佳方法?...相关推荐

  1. c语言金字塔输出乘法表,python中打印金字塔和九九乘法表的几种方法

    # 打印九九乘法表 for i in range(1,10): for j in range(1,i+1): # x=i*j # print(i,'*',j,'=',x,end=' ') print( ...

  2. c语言case后接printf,C编程中switch。case 问题

    int main() { int imonth; printf("请输入月份:\n"); scanf_s("%d",&imonth,2); switch ...

  3. c语言字符串 s,c – printf格式字符串中“% – *.* s”的含义是什么

    你可以在这里阅读printf的手册页: http://pubs.opengroup.org/onlinepubs/009695399/functions/fprintf.html.但是它更像是法律文本 ...

  4. c语言int t格式,如何在C中打印int64_t类型

    C99标准具有整数类型,字节大小类似int64_t.我使用下面的代码: #include #include int64_t my_int = 999999999999999999; printf(&q ...

  5. python列表输出奇数_Python程序在列表中打印奇数

    在本文中,我们将学习解决给定问题陈述的解决方案和方法. 问题陈述 给定一个可迭代的列表作为输入,我们需要在给定的可迭代列表中显示奇数. 在这里,我们将讨论三种解决此问题的方法. 方法1-使用增强的fo ...

  6. python怎么输出结果_如何在python中打印SQLite查询的结果?

    我试图打印这个SQLite查询的结果来检查它是否已经将数据存储在数据库中.目前它只打印None.有没有办法在Microsoft Word或LibreOffice等程序中打开数据库.只是为了看看它是否已 ...

  7. linux bool变量,Objective-C中的占位符,打印BOOL类型数据

    常用的一些占位符: %@:字符串占位符 %d:整型 %ld:长整型 %f:浮点型 %c:char类型 %%:%的占位符 尽管有那么多的占位符,但是好像没有发现BOOL型的数据的占位符,这也是比较纠结的 ...

  8. Objective-c中的占位符,打印BOOL类型数据

    常用的一些占位符: %@:字符串占位符 %d:整型 %ld:长整型 %f:浮点型 %c:char类型 %%:%的占位符 尽管有那么多的占位符,但是好像没有发现BOOL型的数据的占位符,这也是比较纠结的 ...

  9. c语言输出字符串缩进,C语言printf()和puts()的简单使用

    程序在计算机的内存中运行,得出结果以后总是需要输出,这样我们才能查看程序的运行状况.C语言用于输出的主要方法是使用格式输出函数 printf( ) 和字符串输出函数 puts( ). printf( ...

最新文章

  1. 中间件(5)负载均衡
  2. 《数据库系统实训》实验报告——子查询与组合查询
  3. openSUSE设置为路由服务器
  4. jquery知识巩固
  5. python医学数据挖掘_GitHub - SSSzhangSSS/Python-Data-mining-Tutorial: Python数据挖掘教程
  6. LeetCode 505. 迷宫 II(BFS / Dijkstra 最短路径)
  7. 离散余弦变换原理及实现过程【转载】
  8. BZOJ2654/COGS1764 [2012国家集训队]tree(陈立杰) [生成树,二分]
  9. 安卓启动相关以及架构设计相关
  10. 召之即来,来之能战,战则必胜——走进华云数据交付团队
  11. win10字体模糊发虚怎么回事?win10字体模糊发虚电脑问题还是系统问题?
  12. macOS配置Android SDK 环境变量
  13. Scala中fold()操作和reduce()操作的区别
  14. springboot+vue+elementUI 校园志愿者管理系统#毕业设计
  15. / ./ ../的区别
  16. 网易云音乐歌单详情列表爬虫破解
  17. iOS虚拟支付被封,6个技巧帮你快速解决烦恼
  18. win10 cmd窗口中文乱码,永久解决方法
  19. android照片不小心删除,如何恢复安卓手机误删除的照片
  20. Python函数*args与**kwargs的用法

热门文章

  1. 如何正确的写加减乘除函数
  2. 如何看计算机几核,电脑几核怎么看?查看电脑属于几核的方法
  3. 怪兽充电一年亏损4个亿,共享经济平台如何借助分账系统打开交易新局面?
  4. 谷歌音乐批量下载利器 ubuntu
  5. 十万个为什么-基础篇
  6. 英语里面关于货币数量的单词有哪些
  7. 异常处理:Eclipse下解决Plugin execution not covered by lifecycle configuration异常
  8. 阿里巴巴校园招聘 —— 灵犀游戏开发测试岗笔试题目总结(菜鸡版解析)涉及知识点——十字链表、线程与堆栈、FTP、Telnet、红黑树、哈夫曼树、平衡二叉树、乐观锁、悲观锁、HTTP、NIM游戏
  9. Tribon线型光顺使用技巧
  10. java统计投票张三李四_[Java教程]c语言训练题:关于张三李四王五说谎的问题(此处用javascript实现)...