在Go语言中如何从文件中逐步输入,如c / c ++中的freopen

时间:2015-08-27 17:59:51

标签: go

#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 语言执行此操作?因此,我不需要手动提供大量数据或在代码中添加数据。

2 个答案:

答案 0 :(得分:3)

您不需要仅从stdin扫描,直接打开文件。

fmt包有一系列fmt.Fscan*功能。

答案 1 :(得分:2)

您的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)