fopen(字符数组变量,"rb"),scanf 可以实现但是 fgets 不可以

2016-10-29 15:59:33 +08:00
 zyqf

最近在写找迷宫路径的算法,遇到一个小小问题,百度不到, Google (也许英文太烂)不到,特意来问下。

要打开一个用户指定的迷宫文件

用 scanf 获取输入并存入 filepath[30]中,再用 fopen(filepath,"rb")打开文件,可正常打开。

但是用 fgets 获取的话,则打开文件失败!

我测试过了, filepath 中的内容是正确的。

不知道是什么原因。希望大家能帮忙解惑下,谢谢~

int load_map(char map[N][N] ,pos_seat &start, pos_seat &end){
	//载入地图文件
	char ch;
	char filepath[30];
	int x = 0;
	int y = 0;
	FILE *fp;

	fgets(filepath,sizeof(filepath),stdin);  //这种获取用户输入,打开文件失败!
	//scanf("%s",filepath);//这种则可以成功
	if((fp = fopen(filepath,"rb"))==NULL){
		printf("文件打开失败!\n");
		exit(0);
	}
    //.略过部分代码......
	return 0;
}
1569 次点击
所在节点    C
5 条回复
zk8802
2016-10-29 16:16:21 +08:00
你输入的路径是什么?长度是多少?
SuperFashi
2016-10-29 16:25:30 +08:00
因为 fgets 读到的字符串带回车,所以不行。若你想用 fgets 的话,你需要 `filepath[strcspn(filepath, "\n")] = '\0';`
zyqf
2016-10-30 00:04:39 +08:00
@SuperFashi 果然,感谢!
ryd994
2016-10-30 02:03:01 +08:00
@SuperFashi 其实判断一下最后一个字符是不是\n 就好了啊
用 strcspn 扫全长啊
SuperFashi
2016-10-30 20:09:53 +08:00
@ryd994 然后就有一个问题,如何知道最后一个字符的位置? fgets 返回的可和 fread 不一样,你只能用 strlen ,所以还是全长的时间。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/316431

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX