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