为什么在尝试读取字符时getw返回-1?

pla*_*ore 16 c

我希望我能看到结果65,因为65是A的ASCII值。

为什么我得到-1?

#include <stdio.h>

int main()
{
    FILE *fp;
    fp=fopen("first.txt","w");
    putc('A',fp);
    fclose(fp);
    fp=fopen("first.txt","r");
    int x=getw(fp);
    printf("%d\n",x);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Nik*_* C. 16

您正在向文件中写入一个字节,但随后尝试sizeof(int)从文件中读取字节。getw()因此返回EOF,值为EOF-1。

因此,在使用getw()时应检查文件句柄ferror(),以便能够判断getw()返回的值是从文件读取的值还是错误代码。

或更好的是,用于fread()读取文件。getw()是一个用于与旧代码兼容的旧函数。或使用getc()fgetc()代替,它总是将unsigned char强制类型转换为int,因此EOF很容易区分:

int x = getc(fp);
if (x == EOF) {
    fputs("Error reading from file.\n", stderr);
} else {
    printf("%d\n",x);
}
Run Code Online (Sandbox Code Playgroud)

  • @ jackw11111 getc是,字符编号。getc返回一个int(以容纳EOF)。 (6认同)

pas*_*ure 6

哦,我看到您在使用“ w”时遇到问题,只需将“ w”更改为“ c”并微笑即可。实际上,您在正确的轨道上。只需将getw()更改为getc()。

输出为-1,因为您正在使用getw()函数读取包含char的.txt文件,而getw()函数从文件读取整数。因此,正确使用的函数是getc()函数,因为.txt文件中有一个char。getc()函数从文件读取字符。

复制和粘贴速度更快:

#include <stdio.h>

int main()
{
    FILE *fp;
    fp=fopen("first.txt","w");
    putc('A',fp);
    fclose(fp);
    fp=fopen("first.txt","r");
    int x=getc(fp);
    printf("%d\n",x);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这将输出65。