c - 实现 fgetc;试着一个字一个字地读

标签 c fgetc

我正在尝试逐字阅读,以下是我采用的逻辑。这很好地读取单词,除非它到达一行中的最后一个单词,其中存储当前文件的最后一个单词和下一个新行的第一个单词。有人可以告诉我如何让它工作吗?

int c;
int i =0;
char line[1000]
do{
    c = fgetc(fp);

    if( c != ' '){
        printf("%c", c);
    line[i++] = c;

    }else if((c == '\n')){

//this is where It should do nothing

    }else{
    line[i] = '\0';
    printf("\\0 reached\n");//meaning end of one word has been reached
    strcpy(wordArr[counter++].word, line);//copy that word that's in line[xxx] to the struct's .word Char array
    i=0;//reset the line's counter

    }//if loop end



} while(c != EOF);//do-while end

fp 是一个文件指针。

HI BABY TYPE MAYBE
TODAY HELLO CAR
HELLO ZEBRA LION DON
TYPE BABY

我得到(没有引号)

"HI"
"BABY"
"TYPE" 
"MAYBE
TODAY"

最佳答案

看看这个:

if(c != ' ') {
    // ...
} else if(c == '\n') {
    // WILL NEVER BE REACHED
}

如果 c == '\n',则 c != ' ' 也为真,这意味着第二个 block 将是跳过,第一个 block 将针对所有 '\n' 字符运行(即它们将被打印)。

关于行尾的其他答案是错误的。未以二进制模式打开的 C FILE * 将为您处理 EOL。如果你有一个来自 DOS 的文件并且你在 Unix 上阅读它可能会产生问题,但我怀疑这是你的问题,如果它正在处理它可能比这里显示的答案更复杂一些。但是当你到达那座桥时,你可以过桥。

关于c - 实现 fgetc;试着一个字一个字地读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8865614/

相关文章:

编译器将 printf 更改为 puts

c - 无法理解 C 中的转换

Arduino esp8266中的c++函数修改了c文件中生成的 float ,c++函数退出后在c文件中看到乱码

c - 标签不会减少为整数常量

c - C 中的文件 I/O - 如何从文件读取然后写入文件?

c - 如何在C中多次读取文件内容

c - fgetc() 无法正常工作

c - 用 C 编写我自己的 Cat 函数

c - 获取网关以用于 ANSI C 中的给定 ip

c - 如何读取文件直到某个字符或 EOF?