【问题标题】:returned value from fget(filePointer) doesn't changedget(file Pointer) 的返回值不变
【发布时间】:2018-03-27 16:00:59
【问题描述】:

我尝试使用unsigned char ch1 = fgetc(filePointer); 提取字符,但返回的值始终是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;
}

对于我检查过的任何输入(例如ABC),输出都是。当我将printf("%c", ch1); 更改为printf("%d", ch1); 时,输出始终为255。我想获取我在输入中输入的字符。

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

【问题讨论】:

    标签: c fgetc


    【解决方案1】:

    unsigned char ch1 = fgetc(filePointer); filepointer 指向EOF(-1) 时,在下一个语句中,您将打印ASCII 的值,即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()

     rewind(filepointer);/* this is required to get first char of file */
     unsigned char ch1 = fgetc(filePointer);
     fclose(filePointer);
     printf("%c", ch1);
    

    【讨论】:

    • fgetc 返回一个 int
    • 是的 @AnttiHaapala fgetc() 在该语句中返回 int-1 并将其分配给 ch1 声明为 unsigned char
    • 这是为了指出应该更清楚并表明读取的字符存储在int类型的变量中:D
    【解决方案2】:

    当您写入*FILE ptr 时,它的指针会前进并设置到文件末尾,准备追加下一个字符。 要在不重新打开文件并重用同一个文件指针的情况下读回一些数据,您可能需要先回退指针。

    尝试添加

    fseek(filePointer, 0, SEEK_SET);
    

    在读回数据之前

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多