2013-07-10 5 views
4

Итак, у меня есть строка длиной 10. И я хочу напечатать буквы из 4-6 [включая оба], и я хочу охватить вывод по определенной длине L, причем цифры расположенных на правой стороне.Печать форматированной строки в C

Для например

Если бы я имел оригинальную строку 123456789, то следующий код должен отображаться в следующем порядке.

printf(Original); 
printf(from 4-6, over 5 spaces) 

Выход:

123456789 
    456 

То есть 456 распространяется на 5 мест и с отступом вправо.

Как это сделать в C?

EDIT 1: Что делать, если моя ширина не является постоянной, и у меня есть переменная, которая диктует ширину. Аналогично для длины подстроки есть переменная. Любой способ сделать это сейчас?

Могу ли я сделать что-то вроде

printf("%%d.%ds",width,precision,expression); 
+0

разделите целое число на конкретный массив, а затем распечатайте любой индекс массива, который вам нравится. – Ishmeet

ответ

7

Очень прямой:

printf("%5.3s\n", Original + 4); 
     ^^ 
     | | 
     | +--- precision, causes only 3 characters to be printed 
     | 
     +----- field width, sets total width of printed item 

С правой регулировочная по умолчанию, вы получите желаемый результат.

Точность «спасает» нас от необходимости извлекать три символа в правильно завершенную строку, очень удобную.

Вы можете использовать динамические значения либо для точности или ширины поля (или оба, конечно), указав ширину, как * и передавая int аргумент:

const int width = 5, precision = 3; 
printf("%*.*s\n", width, precision, Original + 4); 
+0

Спасибо за это, скажем, например, моя ширина поля не постоянна, каким-либо образом я могу включить это? То есть, если у меня есть переменная width, которая говорит мне общую ширину. – Kraken

+0

Добавлен в редакцию. – Kraken

+0

@Kraken Обновленный ответ. – unwind

5
#include <stdio.h> 

int main(void) 
{ 
    char *original = "123456789"; 

    printf("%5.3s\n", original + 3); 
    return 0; 
} 

РЕДАКТИРОВАТЬ:

если вы хотите, чтобы точность была основана на переменной:

int prec = 2; 

printf("%5.*s\n", prec, original + 3); 

... то же самое для ширины

+0

Я предполагаю, что оригинальный плюс 3 начнет строку с 4, что заставляет ее остановиться на 6? – Kraken

+1

3 in% 5.3s - точность (максимальные символы для печати) –

+0

@DavidRF Редактировать вопрос, можете ли вы добавить к ответу? – Kraken

Смежные вопросы