c - fscanf 及其扫描的数据类型
问题描述
比较这两个代码片段:
#include <stdio.h>
int main(void) {
FILE *f = fopen("file","w");
int i;
fputs("12A",f);
fclose(f);
f = fopen("file","r");
fscanf(f,"%d",&i);
fclose(f);
printf("%d",i);
return 0;
}
输出 12
#include <stdio.h>
int main(void) {
FILE *f = fopen("file","w");
char c;
fputs("12A",f);
fclose(f);
f = fopen("file","r");
fscanf(f,"%c",&c);
fclose(f);
printf("%c",c);
return 0;
}
输出 1
我理解为什么代码 #1 输出 12 因为 fscanf() 只扫描整数,但代码 #2 让我感到困惑,因为 fscanf() 扫描 char 类型的数据,那么为什么它输出 1?
我提前感谢您与像我这样的业余程序员分享您的智慧!
解决方案
在第一种情况下,您使用fscanf(f,"%d",&i);
with %d
which 使其读取整数。
在第二种情况下,您使用fscanf(f,"%c",&i);
的是 a %c
,这使得它读取单个字符,即只有一个字节。
因此,在第二种情况下,它只读取'1'
.
推荐阅读
- javascript - 在嵌套导航器中导航时未定义 route.params?
- oracle - 如何在 Oracle SQL Developer 的存储过程中将表名列表作为参数传递?如何使用 PLSQL VARRAY 或嵌套表?
- amazon-web-services - 使用 API Gateway 防止 Lambda 中的意外无限循环
- python - 用python索引非常大的十六进制文件
- javascript - 我在主机上收到 POST 500 内部服务器错误,而它在 localhost 上运行良好
- java - 在频道“channel_id_here”错误上发布通知失败
- c# - 未调用 SaveStateToBundle
- c# - 有没有办法在没有卸载注册表或 C:\Windows\Installer 的情况下检测安装位置?
- google-apps-script - 使用 Google 脚本检查 Google 驱动器文件夹中的特定文件
- angular - 有没有人想办法让 Protractor 中的 ChromeDriver 始终使用稳定版本?