输入输出(io)
| 功能 | 写法 |
|---|---|
| 打印到标准输出 | dayin(...)(print),内建,不需要导入 |
| 读标准输入、写标准错误 | io 模块,需要 daoru "io" |
io 模块没有拼音名,函数有拼音名。
dayin 打印
cpro
dayin("x =", 42) // x = 42
dayin([1, 2, 3]) // [1, 2, 3]
dayin() // 只输出一个换行cpro
print("x =", 42) // x = 42
print([1, 2, 3]) // [1, 2, 3]
print() // 只输出一个换行- 参数个数任意,参数之间用一个空格分隔,末尾自动换行
- 输出到标准输出(stdout)
- 不需要导入,中文写法是
打印
各类型的输出格式:
| 类型 | 输出 |
|---|---|
| 整数、浮点数 | 十进制数字 |
zhenjia(bool) | true / false |
zifuchuan(string) | 原样输出;在数组、结构体里时加引号 |
| optional | 有值时输出值,空时输出 none |
| 数组 | [1, 2, 3] |
| 结构体 | {name: "张三", age: 18} |
| 地址 | 0x 开头的十六进制 |
函数值、闭包、nocopy 结构体不能打印。
函数一览
| 拼音 | 英文 | 签名 | 说明 |
|---|---|---|---|
du_hang | read_line | () kexuan(zifuchuan) | 读一行 |
du_quanbu | read_all | () zifuchuan kecuo | 读取全部输入 |
cuowu_dayin | eprint | (msg zifuchuan) kongbai | 输出一行到标准错误 |
du_hang 读一行
从标准输入读取一行,返回内容不含换行符(\n 和 \r\n 都会去掉)。输入结束时返回 kong:
cpro
daoru "io"
rukou() {
bl line = io.du_hang()
dang (line != kong) {
dayin("读到:", jiebao(line, ""))
line = io.du_hang()
}
dayin("输入结束")
}cpro
import "io"
rukou() {
var line = io.read_line()
while (line != none) {
print("读到:", unwrap(line, ""))
line = io.read_line()
}
print("输入结束")
}- 空行返回空字符串
"",不是kong;只有输入真正结束才返回kong - 输入结束不是错误,所以不需要
changshi - 会一直等待,直到读到一行或输入结束
- 终端里按 Ctrl+D(Linux)或 Ctrl+Z 再回车(Windows)表示输入结束
注意
读取出错或输入不是合法 UTF-8 时,同样返回 kong,和正常结束无法区分。
du_quanbu 读取全部输入
一直读到输入结束,返回全部内容,不处理换行。适合配合管道和重定向使用:
bash
cat data.txt | ./myprog
./myprog < data.txtcpro
daoru "io"
rukou() {
changshi {
bl content = io.du_quanbu()
dayin("共", content.changdu(), "个字符")
} buhuo (e) {
dayin("读取失败:", e.xinxi)
}
}cpro
import "io"
rukou() {
try {
var content = io.read_all()
print("共", content.length(), "个字符")
} catch (e) {
print("读取失败:", e.msg)
}
}读取出错、内存不足、输入不是合法 UTF-8 时失败。输入为空时返回 "",不算失败。
可以先用 du_hang 读几行,再用 du_quanbu 读剩下的全部内容。
cuowu_dayin 输出到标准错误
把一行文字输出到标准错误(stderr),末尾自动换行:
cpro
daoru "io"
rukou() {
bl name = "config.toml"
io.cuowu_dayin("警告: 未找到 " +[zifuchuan] name +[zifuchuan] ",使用默认配置")
}cpro
import "io"
rukou() {
var name = "config.toml"
io.eprint("警告: 未找到 " +[string] name +[string] ",使用默认配置")
}- 只接受一个字符串参数,要输出多段内容请先拼接
- 不会失败
正常输出用 dayin,诊断和错误信息用 cuowu_dayin。这样用户把输出重定向到文件时,错误信息仍然显示在终端上:
bash
./myprog < input.txt > result.txt # dayin 的内容进文件,cuowu_dayin 的内容留在终端注意事项
- 只处理文本:读入的内容必须是合法 UTF-8。读写二进制数据请用 文件模块 的
du_zijie/xie_zijie - Windows 换行:
dayin和cuowu_dayin在 Windows 上输出\r\n,Linux 上是\n - Windows 控制台中文:程序会自动把控制台切换到 UTF-8,中文可以直接正常显示
