使用 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

从文件读取时如何找到EOF

C 语言文件操作 ( 文件结尾判定 )

是否有可能知道从文件中读取的长文本将在 C 中使用多少个字符?

从文件中读取字符串到数组中

有没有办法从 ASC 文件中逐行读取并在特定子字符串后检查它?