2
今天我遇到了scanf函数的一个问题。假设你有如下例子的结构。使用fscanf读取布尔值
struct structA{
bool bVal;
int nVal;
}
如果您运行下面的代码
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);
它将打印
a.bVal = 0
a.nVal = 0
的原因是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);
我的问题是,有没有一种更清洁,直接的方法来避免解决方案旁边的解决方案?
可能的重复[什么是bool的printf格式说明符?](https://stackoverflow.com/questions/17307275/what-is-the-printf-format-specifier-for-bool) –
@EugeneSh。那个帖子说bool在*阅读*时被提升。 OP的问题是*写* – meowgoesthedog