Ваша оригинальная версия в порядке.
В моей последней работе по программированию на С мы должны были следовать стандартам кодирования MISRA.
В соответствии с правилами MISRA это:
int n;
while(1) {
n = get_data();
if(n == -1)
break;
send(n);
}
запрещено из-за break
, а это:
while((n = get_data()) != -1) { send(n); }
запрещено, потому что назначение появляется в логическом контексте, поэтому я обычно пишу циклы, похожие на вашу оригинальную версию.
Вы можете использовать логическую переменную, если считаете, что она прояснит ваше намерение, или если тест представляет собой сложное выражение:
int n;
bool valid;
do {
n = get_data();
valid = n != -1;
if(valid)
send(n);
} while(valid);
Но для такого простого теста, как "n != -1
", возможно, не стоит делать программу длиннее.