小编UGU*_*UGU的帖子

用fscanf读取布尔值

今天我遇到了scanf函数的问题.假设您有一个类似于以下示例的结构.

struct structA{
  bool bVal;
  int nVal;
}
Run Code Online (Sandbox Code Playgroud)

如果您运行以下代码

structA a;

a.nVal = 7;
...// Assume that we read a text file and the only text is "0"
fscanf(fp,"%d",&a.bVal);

printf("\n a.bVal=%d",a.bVal);
printf("\n a.nVal=%d",a.nVal);
Run Code Online (Sandbox Code Playgroud)

它会打印出来

 a.bVal = 0
 a.nVal = 0
Run Code Online (Sandbox Code Playgroud)

原因是fscanf函数假定a.bVal是一个整数并覆盖a.nVal前3个字节.这个问题可以通过以下脏解决方案来解决.

structA a;

a.nVal = 7;
...// Assume that we read a text file and the only text is "0"
int nBVAL;
fscanf(fp,"%d",&nBVAL);
a.bVal = nBVAL;

printf("\n a.bVal=%d",a.bVal);
printf("\n a.nVal=%d",a.nVal);
Run Code Online (Sandbox Code Playgroud)

我的问题是,解决方案旁边是否有一种更清洁,直接的方法来避免这个问题?

c boolean scanf

2
推荐指数
1
解决办法
502
查看次数

标签 统计

boolean ×1

c ×1

scanf ×1