I think it's more idiomatic because otherwise you have to do:
char c = EOF;
while (c != EOF) {
c = getchar();
...
}
The idiomatic way reads better: "while next character is not EOF".Your (excellent) example of bad style is bad because it reads poorly: "if the result of the assignment of bar & 0xf to foo is true". Not only that, but it is not obvious what the result of an assignment is, if anything. (Yes, I do know it is the value, but personally, I think <nothing> is a more logical result).