当前位置: 首页 > 知识库问答 >
问题:

C 中的格式说明符及其角色?

吕志诚
2023-03-14

编写此代码是为了“查找给定字符是否为数字”

#include<stdio.h>
int main()
{
    char ch;
    printf("enter a character");
    scanf("%c", &ch);
    printf("%c", ch>='0'&&ch<='9');
    return 0;
}

这被编译了,但是在接受输入后,它没有给出任何输出。但是,将倒数第二行中的 %c 更改为 %d 格式说明符时,它确实有效。我有点困惑,因为为什么%d工作,但%c没有,尽管变量是字符数据类型。

共有2个答案

汲永嘉
2023-03-14

内存中,int占用4个字节的内存,您试图将int值存储在一个字符中,如果您使用的是%d,它将返回存储在4个字节内存中的int值,而不是%c中的int数值。

施宏大
2023-03-14

C中的字符实际上只是令牌表中的数字。%c主要用于在人类喜欢读/写的字母数字令牌表和C程序内部使用的原始二进制文件之间进行转换。

表达式< code>ch

相反,您需要使用%d打印整数,然后printf将正确转换为可打印符号'1''0'

顺便说一下,要养成一个习惯,总是用< code>\n结束printf语句(的序列),因为在许多系统中,这样会“刷新输出缓冲区”=实际打印到屏幕上。看看为什么printf在调用后不刷新,除非格式字符串中有换行符?详情见

 类似资料:
  • 说我想打印: 这是正确的。这: 或者这个: ? 事情是在其他地方,所以我遇到了这样的讨论: -即使ch变为无符号字符,代码的行为也不是由C标准定义的。这是因为无符号字符被提升为int(在普通的C实现中),所以int被传递给printf的说明符%u。但是,%u需要一个无符号int,所以类型不匹配,并且C标准没有定义该行为 -你的评论不正确。C11标准规定转换说明符必须与函数参数本身的类型相同,而不是

  • 本文向大家介绍Fortran 分配格式说明符,包括了Fortran 分配格式说明符的使用技巧和注意事项,需要的朋友参考一下 示例 在Fortran 95之前,可以将分配的格式用于输入或输出。考虑 该assign语句将语句标签分配给整数变量。以后将此整数变量用作print语句中的格式说明符。 在Fortran 95中删除了这种格式说明符分配。相反,更现代的代码可以使用其他形式的执行流控制 或字符变量

  • 问题内容: 下面是我以前如何将浮点数截断到两位小数 我检查了文档和电子书,但无法弄清楚。谢谢! 问题答案: 根据David的回答,到目前为止,我最好的解决方案是 我认为这是最类似于Swift的解决方案,将格式化操作直接与数据类型相关联。可能是某处有一个内置的格式化操作库,或者它可能很快就会发布。请记住,该语言仍处于测试阶段。

  • 由于ANSI C99,通过有或。但是bool是否也有格式说明符? 它将打印:

  • DELPHI中解析JSON数据 可以使用我们的DEMO测试程序包中带的SuperObject,并可参考使用样例。 C#中解析JSON数据 使用LitJson.dll,点这里下载LitJson 使用时先引用 ,然后LitJson.JsonData jdata = LitJson.JsonMapper.ToObject(json);感谢长沙-集拓-车工的分享!

  • 什么是INI接口格式 为了简化接口的开发,避免开发接口时使用JSON等数据格式,我们提供了INI文件交换的接口方式。 接口统一使用常见的ini文件格式,并且使用文件交换的方式进行数据通讯。 INI格式接口文件优点是: 采用文件格式交换,跟踪更方便。 一个文件中完整定义了协议命令的名称、get参数内容、post参数内容。 支持多层级的数据表达。 扩展方便,参数无长度和数量限制。 一个典型的提交文件格