当程序退出时 stdin 中仍有剩余时,C 和 Go 之间有什么区别

主程序


#include <stdio.h>


int main() {

    int k;

    scanf("%d", &k);

    return 0;

}

主程序


package main


import "fmt"


func main() {

    var n int

    fmt.Scan(&n)

}

root@82da6559c1c0:/code# go run main.go 

123x123

root@82da6559c1c0:/code# 123

bash: 123: command not found

root@82da6559c1c0:/code# gcc main.c -o main

root@82da6559c1c0:/code# ./main

123x123

root@82da6559c1c0:/code# 

  1. 我想知道为什么在 Golang 中,123被插入到我的 bash 命令中。但在 C 中它没有?有什么不同吗?(我知道标准输入中还有一些字符)

  2. 我想知道如何让 Golang 表现得像 C 一样?


慕仙森
浏览 65回答 1
1回答

慕少森

默认情况下,stdin在 C 中缓冲,因此您scanf会导致更大的输入读取(进入缓冲区)。在 Go 中,os.Stdin没有缓冲。如果您想获得与您在 C 程序中看到的相同的结果,您可以将 stdin 包装在 a 中bufio.Reader,尽管这是否与您正在使用的任何 C 标准库具有完全相同的行为将需要测试。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go