#c
Вопрос:
Мой код работает полностью, но для полного признания нам нужно ставить запятую после каждого числа, кроме последнего. Я не уверен, где мне следует его разместить, так как там, где он заканчивается либо в цикле for, либо вне его, он не выглядит правильно.
Мой код выдает 25 0 33, как и должно быть, должен выглядеть как 25, 0, 33
Входные данные для выборки: 5 25 51 0 200 33 0 50
#include <stdio.h>
int main() {
int numVals;
int max, min;
printf("How many integers to enter?n");
scanf("%d", amp;numVals);
int array[numVals];
printf("Please enter %d integers: n", numVals);
for (int i = 0; i < numVals; i) {
scanf("%d", amp;array[i]);
}
printf("Lower and upper bounds: n");
scanf("%d %d", max, min);
for (i = 0; i < numVals; i) {
if (array[i] >= min amp;amp; arr[i] <= max {
printf("%d", array[i]);
}
}
return 0;
}
Комментарии:
1. В своем цикле вы можете определить, находитесь ли вы на последней итерации? Если вы можете, то выводите трейлинг только
"., "
в том случае, если это не так.2. Легче определить, находитесь ли вы на первой итерации, а затем выводите только начальную запятую, если это не так.
3. Это справедливое замечание!
4. Ваша другая альтернатива заключается
printf (i>0?", %d":"%d", array[i]);
в том, что, установивi>0
условие, предсказание ветвления сведет к минимуму влияние условного только наfalse
путь троичного на первой итерации.
Ответ №1:
Простой способ — изменить разделитель после первого числа.
const char *sep = "";
for (i = 0; i < numVals; i) {
if (array[i] >= min amp;amp; arr[i] <= max) {
printf("%s%d", sep, array[i]);
sep = ", ";
}
}
prinf("n");
Комментарии:
1. Это хороший подход.
2. Хорошо, что не связано с условным.
3. Немного неэффективно продолжать настройку
sep
, но любой другой метод включает тестированиеi
, которое, вероятно, хуже, так что это кажется лучшим подходом.4. Хотя он действительно унаследовал опечатку (в вопросе отсутствует закрытая скобка
if
) из вопроса.5. @Chris Ответ изменен.