来自fget(filePointer)的返回值未更改

时间:2018-03-27 16:01:00

标签: c fgetc

我尝试使用unsigned char ch1 = fgetc(filePointer);提取字符,但返回的值是allways 255。这是我的代码:

#include <stdio.h>
#include "anotherCFile.c"
int main(int argc, char **argv)
{
    int ch;
    FILE* filePointer;
    filePointer = fopen("text.txt", "w+");
    ch = fgetc(stdin);
    while (ch!=EOF) {
        fputc(ch, filePointer);
        ch = fgetc(stdin);
}
    unsigned char ch1 = fgetc(filePointer);
    fclose(filePointer);
    printf("%c", ch1);
    return 0;
}

对于我检查的任何输入(s.a。ABC),输出为。当我将行printf("%c", ch1);更改为printf("%d", ch1);时,输出始终为255。我想得到我在输入中输入的字符。

(正确创建text.txt文件)。感谢。

2 个答案:

答案 0 :(得分:1)

当您写入*FILE ptr时,其指针会前进并设置为文件末尾,准备附加下一个字符。 要重新读取某些数据而不重新打开文件并重复使用相同的文件指针,您可能需要先回滚指针。

尝试添加

fseek(filePointer, 0, SEEK_SET);

在阅读数据之前

答案 1 :(得分:1)

unsigned char ch1 = fgetc(filePointer); filepointer指向EOF(-1)时,在下一个语句中,您正在打印ASCII的{​​{1}}值。

255(bcz ch is declared as unsigned)定义为EOF

#define EOF (-1)

我想得到我在输入中输入的字符。?在阅读之前做printf("%c\n,ch1); /* EOF is not printable char so it prints � */ printf("%d\n",ch1); /* fgetc() returns int, As char read is stored in a variable of type int and that is EOF,and -1 equivalent unsigned value is 255 */

rewind() or fseek()