ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

C语言入门:输入与输出

C语言入门:输入与输出 #一前言C语言的输入与输出与Java有很大区别与java语言可以直接输出内容不同C语言中需要通过占位符来输出内容这种差异并非 C 语言故意设置障碍而是两种语言的设计哲学不同。Java 的打印方法接收的是对象对象自带类型信息虚拟机能在运行时自动判断这是整数还是字符串。而 C 语言没有运行时类型信息printf 只是一个普通函数它拿到的只是内存里的一串二进制数据——它无法自行分辨这段数据是整数、小数还是字符。因此必须通过占位符提前告知函数“接下来这个数据按整数解读”“下一个按浮点数解读”。占位符本质上是程序员与编译器之间的一份数据解读协议。#二1.C语言中的占位符分类//定义变量 int age 18; float f 3.1234567; double d 3.123456789; char c a; //定义字符数组来保存字符串数据 char str[] hello; //输出语句 // 占位符int - %d float - %f float - %lf char - %c 字符串 - %s // 换行符 \n // %3d 保留3位数右对齐 %-3d 左对齐 printf(%3d \n, age); //默认保留6位小数(四舍五入) //保留指定位置 %.3f 保留3位 printf(%.3f \n, f); printf(%.3lf \n, d); printf(%c \n, c); printf(%s \n, str); //输入语句:输入两个数字计算和 // 取址(变量的内存)符号a 取出变量a 的内存地址给该内存地址的变量赋值 int a, b; scanf(%d %d, a, b); printf(a b %d \n, a b); //定义字符数组的长度 char str[10]; scanf(%s, str); printf(%s, str); return 1; }表格2.宽度、精度与对齐%-md左对齐 %0md不足位补 0如 %05d 输出 00018 %.nf保留 n 位小数会自动四舍五入 %m.nf总宽度至少 m小数 n 位两者可同时使用。 注意宽度只是最少占多少格如果数据本身超过指定宽度会按实际长度完整输出不会被截断。#三C语言输入与输出时的区别C语言输入时需要作为取址符而输出时则不需要。 取址(变量的内存)符号a 取出变量a 的内存地址给该内存地址的变量赋值scanf 的任务是把键盘输入的值写回变量所在的内存。为此它必须知道变量的地址而不能只拿到变量的值。a 的含义就是取出变量 a 的内存地址这样 scanf 才能顺着地址把数据存进去。 打个比方printf 像是念出纸条上的内容只需要值而 scanf 像是往抽屉里放东西必须知道抽屉在哪也就是地址。 反过来看printf 不需要修改变量只负责读取并显示因此直接传值即可不用加 。这一进一出的差别根源就在于是否需要回写内存。但输入字符串时不需要取址符char str[10]; scanf(%s, str); printf(%s, str);因为在 C 语言中数组名本身就代表数组首元素的地址。str 已经是一个地址再加 反而会变成数组的地址的地址类型不匹配。所以字符串输入时不加取址符并不是规则出现了例外而是规则依然成立——scanf 始终需要地址只是数组名天然就是地址。#四结语C与Java的输入输出对比C 语言的输入输出看似比 Java 繁琐却恰恰展现了程序运行的底层逻辑数据存放在内存的哪个地址、占用多少字节、应当如何解读都需要程序员亲自指明。占位符负责约定数据的解读方式取址符 负责提供数据的存放位置这两者构成了 C 语言 I/O 的核心骨架。通过对比可以发现Java 并非另起炉灶而是在这套机制之上封装了一层更易用的接口。先理解 C 的手动挡再使用 Java 的自动挡就能清楚知道那些被省略的细节究竟去了哪里。这既有助于快速回忆并巩固 Java 知识也能让 C 语言的学习摆脱死记硬背真正建立在理解之上。
返回列表