Skip to content

输入输出(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_hangread_line() kexuan(zifuchuan)读一行
du_quanburead_all() zifuchuan kecuo读取全部输入
cuowu_dayineprint(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.txt
cpro
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,中文可以直接正常显示

cpro 目前处于测试阶段