php小编西瓜在Golang中编写程序时,遇到了一个有趣的问题:如何在文件中打印第一个输入两次。这个问题看似简单,但实际上涉及到了如何读取输入、处理字符串和文件操作等多个方面的知识。通过深入研究和实践,我成功解决了这个问题,并将解决方法分享给大家。接下来,我将详细介绍我在Golang中的程序实现步骤。
问题内容
我尝试获取一些 csv 格式的字符串作为输入,然后将其打印到实际的 csv 文件中。它可以工作,但它会打印第一个字符串两次。
我的代码如下所示:
func main() {
scanner := bufio.newscanner(os.stdin)
n := 0
inputfile, err := os.create("input.csv") //create the input.csv file
if err != nil {
log.fatal(err)
}
csvwriter := csv.newwriter(inputfile)
fmt.println("how many records ?")
fmt.scanln(&n)
fmt.println("enter the records")
var lines [][]string
for i := 0; i < n; i++ {
scanner.scan()
text := scanner.text()
lines = append(lines, []string{text})
err := csvwriter.writeall(lines)
if err != nil {
return
}
}
csvwriter.flush()
inputfile.close()
}
对于 n=2 和记录:
abcd, efgh, ijklmn
opq, rstu, vwxyz
输出如下所示:
"abcd, efgh, ijklmn"
"abcd, efgh, ijklmn"
"opq, rstu, vwxyz"
这是我第一次使用 golang,我有点迷失:d
解决方法
您正在循环中编写 csv,以便第一行打印双倍。这是更正后的代码。
package main
import (
"bufio"
"encoding/csv"
"fmt"
"log"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
n := 0
inputFile, err := os.Create("input.csv") //create the input.csv file
if err != nil {
log.Fatal(err)
}
defer func() {
inputFile.Close()
}()
csvwriter := csv.NewWriter(inputFile)
defer func() {
csvwriter.Flush()
}()
fmt.Println("How many records ?")
fmt.Scanln(&n)
fmt.Println("Enter the records")
var lines [][]string
for i := 0; i < n; i++ {
scanner.Scan()
text := scanner.Text()
lines = append(lines, []string{text})
}
err = csvwriter.WriteAll(lines)
if err != nil {
return
}
}
以上就是我在 Golang 中的程序在文件中打印第一个输入两次的详细内容,更多请关注编程网其它相关文章!