使用 getc 从文件读取时检查字符
Posted
技术标签:
【中文标题】使用 getc 从文件读取时检查字符【英文标题】:checking chars when reading from file with getc 【发布时间】:2013-07-13 11:39:06 【问题描述】:在下面的代码中,我试图存储文件中的所有字符(包括换行符)。 如果读取了换行符,变量 'i' 应该递增并且 'j' 重置为 0,但这不会发生。通过从我的数组打印到控制台,我已经确认实际上正在读取和存储换行符。
void scan_solved_nonogram(board *b)
FILE *file = fopen("test.txt", "r");
int i = 0, j = 0;
while( ( b->symbol[i][j] = getc(file) ) != EOF )
j++;
if( b->symbol[i][j] == '\n' )
i++;
j = 0;
fclose(file);
b->size_i = i;
b->size_j = j;
【问题讨论】:
一个建议而不是while( ( b->symbol[i][j] = getc(file) ) != EOF )
,使用 int 变量作为示例 int ch; and change while like
while( ( c = getc(file) ) != EOF )` 现在在 while
检查 ch
与 \n
我假设符号是一个二维的字符数组。你确认你得到一个 0xA 字符(换行符)吗?
【参考方案1】:
问题是你在检查换行符之前增加了 j。
while( ( b->symbol[i][j] = getc(file) ) != EOF )
j++;// you increment j, so you need to check for newline at j-1
if( b->symbol[i][j-1] == '\n' )
i++;
j = 0;
【讨论】:
很好,我自己没看到这个! 真是个不错的收获,也给他提个建议,怎么改正就好了! :) 建议我的意思是,OP 应该在 while 条件下使用 int 变量,阅读我的评论来回答。以上是关于使用 getc 从文件读取时检查字符的主要内容,如果未能解决你的问题,请参考以下文章
要从键盘读入含有空格字符的字符串,应该用啥函数?A.getc() B.gets() C.getchar() D.scanf