c - 如何在C中读取带空格的整行文本

标签 c

对于学校的一项作业,我必须让游戏变得更加流氓。我们加载房间的方式来自一个如下所示的文件:

10x12 de4 ds6 p9,8 g7,5 h1,1 M8,9
24x12 ds5 ds6 p9,8 g7,5 h1,1 M8,9
9x16 ds3 ds6 p9,8 g7,5 h1,1 M8,9
18x17 dn9 ds6 p9,8 g7,5 h1,1 M8,9
5x5 de4 ds6 p9,8 g7,5 h1,1 M8,9
16x11 dw7 ds6 p9,8 g7,5 h1,1 M8,9

每个房间都有一个开始尺寸,然后是所有元素及其后面的位置,并用空格分隔。当我读入它时,我无法获取每一行(10x12 de4 ds6 p9,8 g7,5 h1,1 M8,9),我一次只能获取一个元素(10x12,然后是 de4,然后是 ds6 等等)。有没有办法读取直到行尾并将其保存在 char ** rooms 变量?

最佳答案

首先你必须知道每行末尾有一个字符“\n”。 当您打开文件时,它会在文件开头创建一个光标。 当您读取一个字符时,光标会继续移动,直到到达文件末尾,由状态代码“EOF”(-1 值)表示。

要获取一行,策略是读取所有字符,直到到达“\n”。然后一遍又一遍地重复,直到达到“EOF”。 (要小心,因为如果只有一行,则可能没有 '\n')

现在如何使用代码来做到这一点:

使用以下函数:

fopen()//打开文件

getline()//读取一行

幸运的是,这两个函数就足够了,因为它们可以处理所有事情('\n'、'EOF'、光标...)

关于c - 如何在C中读取带空格的整行文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28856584/

相关文章:

c - 在调用 pthread_join 之前到达 pthread_exit()

c++ - C中的波浪号运算符

c - Linux 内核 flush_write_buffers() 如何在 x86 上工作?

C编程。 FizzBu​​zz 程序

c - 如何确定硬盘是否处于休眠或旋转状态?

CentOS:无法执行在 Mac OS X 上编译的二进制文件

c - 错误: initializer element is not constant - linux driver

c - 如何用C语言打印下图?

c - 如何在 getchar() 循环中检测 C 字符串中的最后一个字符

c - 二维数组上的 memcpy