C语言---格式问题

printf中如何输出 长整型
一直都听说gcc -Wall的检查要严格很多,今天发现果然如此。写了一个简单的程序,共15行,用gcc -Wall编译时提示有warning:int format, long int arg,找了半天发现问题出在:用%d输出long型变量。查书,发现书上说的是输出long时用%l,修改之,错的更严重,直接说是无法识别的格式符....上网查阅资料,正确的形式应该是%ld。用C这么多年,居然连这个都搞不清,哎,不说啥了...

ps...转个printf的格式资料

1 一般格式
printf(格式控制,输出表列)
   例如: printf("i=%d,ch=%c\n",i,ch);
说明:
(1)“格式控制”是用双撇号括起来的字符串,也称“转换控制字符串”,它包括两种信息:
        ①格式说明:由“%”和格式字符组成,它的作用是将输出的数据转换为指定的格式输出。
        ②普通字符,即需要原样输出的字符。
(2)“输出表列”是需要输出的一些数据,可以是表达式
(3)  printf函数的一般形式可以表示为
          printf(参数1,参数2,……,参数n)
         功能是将参数2~参数n按参数1给定的格式输出
2 格式字符(9种)
(1)d(或i)格式符。用来输出十进制整数,有以下几种用法:
     ①%d,按整型数据的实际长度输出。
     ②%md,m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
       ③%ld(%mld 也可),输出 长整型数据。
        例如:long a=123456;
               printf("%ld",a);
 (2)o格式符,以八进制数形式输出整数。格式:%o,%mo,%lo,%mlo都可。
   (3)x(或X)格式符,以十六进制数形式输出整数。格式:%x,%mx,%lx,%mlx都可。
    (4)u格式符,用来输出unsigned型数据,即 无符号数,以十进制数形式输出。格式:%u,%mu,%lu都可。
      参见:li4-3.c.r{}
    (5)c格式符,用来输出一个字符。格式:%c,%mc都可。
    (6)s格式符,用来输出一个字符串。格式:%s,%ms,%-ms,%m.ns,%-m.ns都可。
   (7)f格式符,用来输出实数(包括单、双精度),以小数形式输出。格式:%f,%m.nf,%-m.nf都可。
      注意:单精度实数的有效位数一般为7位,双精度为16位。
   (8)e(或E)格式符,以指数形式输出实数。格式:%e,%m.ne,%-m.ne都可。
     (9)g(或G)格式符,用来输出实数,它根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种)。
3 说明
(1)除了X、E、G(用大写字母表示)外,其他格式字符必须用小写字母;
(2)“格式控制”字符串内可以包含转义字符;
(3)如果想输出字符“%”,则应该在“格式控制”字符串中用连续两个%表示,如:
     printf("%f%%",1.0/3);
(4)格式字符表参见下表
                                            表1  printf格式字符
格式字符
说    明
d,i
以带符号的十进制形式输出整数(正数不输出符号)
o
以八进制 无符号形式输出整数(不输出前导符0)
x,X
以十六进制 无符号形式输出整数(不输出前导符0x),用x则输出十六进制数的a~f时以小写形式输出,用X时,则以大写字母输出
u
无符号十进制形式输出整数
c
以字符形式输出,只输出一个字符
s
输出字符串
f
以小数形式输出单、双精度数,隐含输出6位小数
e,E
以指数形式输出实数
g,G
选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0
                  表2  printf的附加格式说明字符
                  
<think> 首先,用户的问题是基于提供的引用内容:"在C语言-1 是否等于false"。我需要参考系统级指令和用户可见层的规则来回答。 系统级指令: - 所有行内数学表达式必须使用$...$格式- 独立公式必须使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题- 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 用户可见层: - 回答结构清晰,帮助用户逐步解决问题,保证回答真实可靠。 - 参考站内引用:用户提供了三个引用:[^1], [^2], [^3]。 用户的查询是:"我想查询在C语言-1 是否等于false 请问C语言-1 是否等于false"。这是一个明确的yes/no问题,但需要解释。 现在,分析提供的引用: - 引用[^1]:讨论了C语言中的false。它说false表示常数0,true表示1,false转换为数字时变成0。 - 引用[^2]:关于C语言中1e-6的含义,与主题无关,但提到浮点运算。 - 引用[^3]:关于素数的检测代码,其中使用了true和false,false表示0,true表示非0。 关键点是:在C语言中,false被定义为0,而true通常是非0。引用[^1]明确指出false表示0。 用户的问题-1是否等于false?在C语言中,false是0,而-1不等于0,所以答案应该是否定的。 但需要更准确地回答。在C语言中,布尔表达式:任何非零值被视为true,0被视为false。所以,false等价于整数0。 因此,-1不等于false,因为false是0。 结构清晰的回答: 1. 解释false在C语言中的含义。 2. 解释-1的布尔值。 3. 直接回答是否相等。 4. 引用相关引用。 参考引用[^1]:它说"false表示常数0"。所以,我可以引用这个。 生成相关问题:系统指令要求生成相关问题。 回答结构: - 先用中文清晰回答。 - 逐步解释。 - 添加引用标识。 - 最后生成相关问题。 最终回答: - -1 != false,因为false是0,-1是非零。 - 在布尔上下文中,-1被视为true。 引用: - [^1]:支持false是0。 - [^3]:在代码中,false用于返回0。 相关问题: 1. C语言中true和false是如何定义的? 2. 如何正确使用布尔表达式在C语言中? 3. C语言中非零值为什么被视为true? 确保LaTeX:可能没有数学表达式,但如果有,就用$...$。 这里,可能需要说明:布尔值本质上是整数。 </think> ### C语言-1 是否等于 false? 在C语言中,**-1 不等于 false**。以下是逐步解释原因: 1. **false 的定义**: 在C语言标准中,`false` 被定义为整数常量 `0`。任何布尔表达式的结果为假时,都等价于整数 `0`。引用[^1]明确指出: > false表示常数0。当自动数据类指定将 false 转换为数字时,它变为0;将 false 转换为字符串时,它变为 "false" [^1]。 因此,`false` 的本质是数值 `0`。 2. **-1 的布尔值含义**: - C语言中,布尔逻辑遵循“非零即真”的规则: - 值为 `0` 表示 `false`。 - 任何**非零值**(包括负数如 `-1`)都被视为 `true`。 引用[^3]在素数判断代码中展示了这一规则:函数返回 `false`(即 `0`)表示非素数,返回 `true`(即非零值)表示素数[^3]。 3. **直接比较 -1 和 false**: - 由于 `false` 等于 `0`,而 `-1` 是一个非零值: - 表达式 `(-1 == false)` 等价于 `(-1 == 0)`,结果为 `0`(false)。 - 验证代码示例: ```c #include <stdio.h> #include <stdbool.h> // 需包含此头文件以使用 bool、true、false int main() { int num = -1; if (num == false) { printf("-1 等于 false\n"); } else { printf("-1 不等于 false\n"); // 此句会输出 } return 0; } ``` 运行结果:`-1 不等于 false`。 4. **关键区别总结**: - `false` 是布尔类的常量,值为 `0`。 - `-1` 是整数,在布尔上下文中被视为 `true`(因其非零),但它不等于 `false`。 综上所述:**C语言中,-1 不等于 false,因为 false 严格等价于 0,而 -1 是非零值**。在编程时,应避免直接将整数与布尔常量比较,以免逻辑错误。如需处理布尔逻辑,建议使用标准库 `<stdbool.h>` 中的 `bool`、`true` 和 `false` 类[^1][^3]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值