как добавить форматирование в инструкцию вывода на C

#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 Ответ изменен.