如何从流中获取两个连续的字符?

时间:2009-12-28 12:24:24

标签: c

我正在读取C中的文件,char中的char,但我需要连续2个字符。拜托,有人可以建议我一些选择吗?

该程序的主要思想是读取源C文件并查找所有重要字符的数量(忽略ws)并忽略'* /'& '/ *'。我正在尝试在非常基础的水平上编写程序,因为它是我的朋友的课程工作。一般来说我是PHP程序员。

这是我设法编写的完整代码。

#include <stdio.h>
#include <string.h>

int in_array(char *array, char searchedEl);
int main(){
  FILE *fp;
  char readChar;
  char exeptChars[] = {'\n', '\t','\0'};
  int charsCounter = 0;
  char *openComment = "/*";
 char *closeComment = "*/";
 char tempHolder[2];
 int j=0;
  fp=fopen("testrw.txt","r");
  if(!fp){
    printf( "Could not open file\n" );
    return 1;
  }
  while( (readChar = fgetc(fp)) != EOF ){
    if((readChar == '*') || (readChar == '/') || (readChar == '\\')){
      if(j < 1){
    tempHolder[j] = readChar;
    j++;
    continue;
      }
      else{
    tempHolder[j] = readChar;
    if(strcmp(tempHolder, openComment) || strcmp(tempHolder, closeComment)){
      charsCounter += 2;
    }
    tempHolder[2]='\0';
    j=0;
    continue;
      }
    }   

    if(!in_array(exeptChars, readChar)){
      printf("Permited char: %c\n", readChar);
      charsCounter++;
    }
  }
  printf("Characters %d\n", charsCounter+1);
  return 0;
}
int in_array(char *array, char searchedEl){
  char tempEl;
  int i=0;
  while(tempEl = array[i]){
    if(tempEl == searchedEl){
      return 1;
    }
    i++;
  }
  return 0;
}

5 个答案:

答案 0 :(得分:1)

fread()将允许您在单个操作中获取多个字节。

答案 1 :(得分:1)

如果下一个字符错误,请使用ungetc(readChar,fp):

char get_token(){
    readChar = fgetc(fp);
    if(readChar==EOF) return END_OF_FILE;
    if(readChar=='/'){
        nextChar=fgetc(fp);
        if(nextChar==EOF) return readChar;
        if(nextChar=='*') return OPEN_COMMENT;
        ungetc(nextChar,fp);
    }
}

答案 2 :(得分:0)

从if()中取出else {}(当然,将其转换为if(j == 1))

答案 3 :(得分:0)

使用

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

ptr - 指向最小大小为(size * count)个字节的内存块的指针。 size - 要读取的每个元素的字节大小。 count - 元素数,每个元素的大小为字节大小。 stream - 指向指定输入流的FILE对象的指针。 size_t - 成功读取的元素总数。

答案 4 :(得分:0)

似乎你正在重新发明轮子。解析char-by-char文本是你不应该做的事情,除非你做的事情非常低级。

我认为最好使用一些文本解析库(GNU regex?)

据我所知,您正在使用C代码搜索注释。如果你想解析C代码,那么many ways比通过char-char解析解析它更好。