为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
jeck猫 2021-11-01 16:54:36
#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):51 2 3 4 5输出:15在 C 语言中,上述程序会自动从in.txt文件中获取数据。我不需要在控制台中提供数据。有没有办法用GO语言做到这一点?这样我就不需要手动提供大量数据或将其添加到代码中。
查看完整描述

2 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

你不需要只从标准输入扫描,直接打开文件。

fmtfmt.Fscan*为此提供了一系列功能。


查看完整回答
反对 回复 2021-11-01
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

你的 C 程序只是一个一个地扫描令牌。当然,在 Go 中有很多方法可以实现这一点。我会推荐这个bufio包,但实际上你所需要的只是一个阅读器和一些将字符串转换为 int 的东西。下面是一个类似于您的 C 程序的示例。


import "bufio"

import "strconv"


file, err := os.Open("in.txt")

if err != nil {

    log.Fatal(err)

}

defer file.Close()


scanner := bufio.NewScanner(file)


base := 0


if scanner.Scan() {

    base += strconv.Atoi(scanner.Text())

}


scanner.Split(bufio.ScanWords)


for scanner.Scan() {

    base += strconv.Atoi(scanner.Text())

}


if err := scanner.Err(); err != nil {

    log.Fatal(err)

}


fmt.Println(base)


查看完整回答
反对 回复 2021-11-01
  • 2 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信