完美解决go Fscanf 在读取文件时出现的问题

先要明白Fscanf的工作原理

Fscanf在遇到\n才结束

遇到\r时就会把\r替换成0

这就有个问题,要注意自己的文本换行符是什么,在Windows下就是\r\n,在Linux,Mac下就是\n,也就是说这里有个坑,

代码在Linux和Mac下读取数据文件是正常的,在Windows下就会遇到各种行末尾有个0,网上办法用什么替换啊,用什么自定义Scan函数啊,太麻烦了,直接使用自带IDE将打开的数据文件集换行符改成LF(Linux,Mac换行符)就行了

如下图Idea

文件右下角LF点击就可以更换换行符

补充:go中的Fscanf读到0的问题

今天在使用Fscanf读矩阵的时候遇到了一个问题,发现每次遇到换行,就多读一个0的问题

func readMaze(filename string) [][]int {
 file, err := os.Open(filename)
 if err != nil {
 panic(err)
 }
 var row,col int
 fmt.Fscanf(file, "%d %d", &row, &col)
 maze := make([][]int, row)
 for i := range maze {
 maze[i] = make([]int, col)
 for j := range maze[i] {
  fmt.Fscanf(file,"%d",&maze[i][j])
 }
 }
 return maze
}

分析得出这是由于windows下的格式导致的,在windows下的换行符是\r\n,所以遇到\r会读一个0进去,在linux下换行符只有\n

解决方法1

直接通过修改ide的格式即可,在goland的下方修改:

改成LF即为linux,这种方法我试了没成功,不知道是不是电脑的原因,可以先试一下这种方法

解决方法2

如果是不能避免,那就把这个0读出来,然后扔掉即可,可以在每行后面,多根一句话:

fmt.Fscanf(file,"%d")

解决方法3

使用方法

fmt.Fscan(file,&maze[i][j])

不规定格式的情况下是不会出现多读0

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • golang 如何替换掉字符串里面的换行符\n

    原始字符串: -----BEGIN LICENSE KEY-----\nL/+HAwEBB2xpY2Vuc2UB/4gAAQIBB1BheWxvYWQBCgABCVNpZ25hdHVyZQEKAAAA\n/gPo/4gB/gHd/7AQABpsaWNlbnNlLW1nci9jb25maWcuUGF5bG9hZP+BAwEBB1Bh\neWxvYWQB/4IAAQoBBUFwcElkAQwAAQZBcHBLZXkBDAABCVN0YXJ0VGltZQEMAAEE\nRGF5cwEEAAEGQWVz

  • Django学习笔记之View操作指南

    Django的View 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. 无论视图本身包含什么逻辑,都要返回响应.代码写在哪里也无所谓,只要它在你当前项目目录下面.除此之外没有更多的要求了--可以说"没有什么神奇的地方".为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件

  • golang 中的 nil的场景分析

    源码中的 nil 是这样定义的 // nil is a predeclared identifier representing the zero value for a // pointer, channel, func, interface, map, or slice type. var nil Type // Type must be a pointer, channel, func, interface, map, or slice type 所以 nil 可以理解为这些类型的零值,声明

  • go并发实现素数筛的代码

    先贴代码 package main import ( "fmt" ) // Send the sequence 2, 3, 4, ... to channel 'ch'. func generate(ch chan int) { for i := 2; ; i++ { ch <- i // Send 'i' to channel 'ch'. } } // Copy the values from channel 'in' to channel 'out', // removing

  • spring boot集成mongodb的增删改查的示例代码

    添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> properties配置 spring.data.mongodb.host=127.0.0.1 spring.data.mongodb.port=27017 spring

  • Golang 并发以及通道的使用方式

    Golang最擅长的就是并发编程,使用Golang可以很方便的进行并发编程.先看一段普通的代码 package main import ( "fmt" "time" ) func Foo(i int) { fmt.Printf("%d will sleep\n", i) time.Sleep(5 * time.Second) fmt.Printf("%d wake up\n", i) } func main() { for i

  • 完美解决go Fscanf 在读取文件时出现的问题

    先要明白Fscanf的工作原理 Fscanf在遇到\n才结束 遇到\r时就会把\r替换成0 这就有个问题,要注意自己的文本换行符是什么,在Windows下就是\r\n,在Linux,Mac下就是\n,也就是说这里有个坑, 代码在Linux和Mac下读取数据文件是正常的,在Windows下就会遇到各种行末尾有个0,网上办法用什么替换啊,用什么自定义Scan函数啊,太麻烦了,直接使用自带IDE将打开的数据文件集换行符改成LF(Linux,Mac换行符)就行了 如下图Idea 文件右下角LF点击就可以

  • .Net Core读取文件时中文乱码问题的解决方法分享

    目录 背景 问题 .NETFramework中的默认属性 .NETCore上的默认属性 解决办法 附.NetCore下读取配置文件中文乱码 总结 背景 今天在使用core web api上传txt文档的时候本来很顺利的,但是一测试发现读取的中文内容是乱码的,很是纳闷. 出于经验,立马把代码的Encoding.Default改成 Encoding.uft8, 发现还是不行.后面索性把上传的文件另存为下,特地选择带有bom的utf8选项. 但是发现还是乱码.郁闷. 问题 于是在本能的百度下,发现方法

  • 完美解决在eclipse上部署Tomcat时出现8080等端口被占用的问题

    问题描述: 在eclipse中部署Tomcat时,出现如下错误. 解决方法如下: 方法一: 1.开始->cmd->输入命令netstat -ano出现下图所示(注意下边显示有些错位,最后一列是PID): 2.有的同学输入netstat -ano后显示不是内部文件,解决方法如下: 开始->cmd->cd: c\WINDOWS\system32\ 结果如上图所示. 3.打开Windows任务管理器,点击查看,点击选择列,勾起PID选项,如下图所示: 4.由于自己机子上的8080端口处于

  • 解决pandas使用read_csv()读取文件遇到的问题

    如下: 数据文件: 上海机场 (sh600009) 24.11 3.58 东风汽车 (sh600006) 74.25 1.74 中国国贸 (sh600007) 26.38 2.66 包钢股份 (sh600010) 61.01 2.35 武钢股份 (sh600005) 75.85 1.3 浦发银行 (sh600000) 6.65 0.96 在使用read_csv() API读取CSV文件时求取某一列数据比较大小时, df=pd.read_csv(output_file,encoding='gb23

  • 详解C语言fscanf函数读取文件教程及源码

    目录 第一部分:问题和结论 fscanf 函数的原型是: 第二部分:实验代码 实验代码: fscanf 函数用于格式化读入文件中数据,可以大大提高读取文件的效率.这次笔者将最近使用该函数的一些经验记录下来. 第一部分:问题和结论 fscanf 函数的原型是: int fscanf(FILE* stream, const char* format, [argument...]); fscanf 函数与 scanf 函数用法类似,只不过前者用于读取文件流的数据而已.至于 fscanf 的基础用法我就

  • 完美解决phpexcel导出到xls文件出现乱码的问题

    解决方法如下所示: <?php include 'global.php'; $ids = $_GET['ids']; $sql = "select * from crm_cost_end where id in ( {$ids} )"; $result = $db->findAll($sql); //echo $result[1]['sn']; //创建一个excel对象 $objPHPExcel = new PHPExcel(); // Set properties $o

  • 完美解决linux下U盘文件只读的问题

    1. 在终端运行如下命令 tail -f /var/log/syslog 2. 插入有只读文件系统故障的U盘 3. 观察命令行输出 输出局部如下: Jul  8 16:44:50 cslouis-pc kernel: [15595.155904] FAT: Filesystem error (dev sdb4) Jul  8 16:44:50 cslouis-pc kernel: [15595.155905]    fat_get_cluster: invalid cluster chain (

  • 解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题

    有时候导入本地模块或者py文件时,下方会出现红色的波浪线,但不影响程序的正常运行,但是在查看源函数文件时,会出现问题 问题如下: 解决方案: 1. 进入设置,找到Console下的Python Console,勾选选项"Add source roots to PYTHONPAT" 2. 在当前项目程序目录右键单击,然后"Mark Directory as"为"Sources Root".之后当前程序所在目录颜色会变化,表示已经完成标记. 3. 之

  • 分析Python读取文件时的路径问题

    Python在读取文件内容时的路径问题,值得深究一下.我想讨论的重点还是在绝对路径上面.在这之前我们先看一下 1:相对路径 这张图演示了在相对路径下寻找查找指定文件.  open('相对路径演示'\'相对路径示例'.txt)打开的是相对当前运行的程序所在目录. 而我当前运行的程序相对位置在桌面. 所以直接print(lines) 可以看到这个结果 2:绝对路径. 绝对路径的查找方法就不演示了,相信每个人都会找到.但是我想讨论的是几个关于路径中的编码问题,相信这对初学者们有很大的帮助. 2.1:你

  • Nodejs读取文件时相对路径的正确写法(使用fs模块)

    在开发Nodejs中,我们往往最常用的模块就是fs核心模块(fs.readFile)来读取文件.代码如下: 但是运行之后,并没有按照想象中一样,读取test.html文件内容,这是一个bug,坑爹的玩意,解决办法: 其实由于运行环境的不同,以上的相对路径的写法导致最后读取的位置是不同的. 正确的写法应该是使用"path.join()"的方式实现:(__dirname表示当前文件的目录名) //require 表示引包,引包就是引用自己的一个特殊功能 var http = require

随机推荐