我希望我能看到结果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)
哦,我看到您在使用“ 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。