我正在读取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;
}
答案 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)