在 Go 语言中如何像 c/c++ 中的 freopen 一样从文件中逐步获取输入

#include<stdio.h>


int main()

{

    freopen("in.txt", "r", stdin);


    int n, val, sum=0;

    scanf("%d", &n);


    for(int i=0; i<n; i++)

    {

        scanf("%d", &val);

        sum += val;

    }


    printf("%d\n", sum);  

}

输入(in.txt):


5

1 2 3 4 5

输出:


15

在 C 语言中,上述程序会自动从in.txt文件中获取数据。我不需要在控制台中提供数据。


有没有办法用GO语言做到这一点?这样我就不需要手动提供大量数据或将其添加到代码中。


jeck猫
浏览 147回答 2
2回答

一只萌萌小番薯

你不需要只从标准输入扫描,直接打开文件。该fmt包fmt.Fscan*为此提供了一系列功能。

收到一只叮咚

你的 C 程序只是一个一个地扫描令牌。当然,在 Go 中有很多方法可以实现这一点。我会推荐这个bufio包,但实际上你所需要的只是一个阅读器和一些将字符串转换为 int 的东西。下面是一个类似于您的 C 程序的示例。import "bufio"import "strconv"file, err := os.Open("in.txt")if err != nil {&nbsp; &nbsp; log.Fatal(err)}defer file.Close()scanner := bufio.NewScanner(file)base := 0if scanner.Scan() {&nbsp; &nbsp; base += strconv.Atoi(scanner.Text())}scanner.Split(bufio.ScanWords)for scanner.Scan() {&nbsp; &nbsp; base += strconv.Atoi(scanner.Text())}if err := scanner.Err(); err != nil {&nbsp; &nbsp; log.Fatal(err)}fmt.Println(base)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go