В чистом Си как-то можно динамически изменять отступ в цикле при выводе на экран через printf?
Допустим:
int a = 1;
a++;
while (a < 10) {
printf("d");
}
Вместо 12 как-то можно подставить переменную а?
> В чистом Си как-то можно динамически изменять отступ в цикле при выводе
> на экран через printf?
> Допустим:
> int a = 1;
> a++;
> while (a < 10) {
> printf("d");
> }
> Вместо 12 как-то можно подставить переменную а?Можно выводить пробелы в цикле (если я правильно понял задачу)
for (int j = 0; j < a; ++j) printf(" ");
>[оверквотинг удален]
>> Допустим:
>> int a = 1;
>> a++;
>> while (a < 10) {
>> printf("d");
>> }
>> Вместо 12 как-то можно подставить переменную а?
> Можно выводить пробелы в цикле (если я правильно понял задачу)
> for (int j = 0; j < a; ++j) printf("
> ");Ok, вопрос в том , как увеличить пробелы для каждой итерации?
>[оверквотинг удален]
>>> int a = 1;
>>> a++;
>>> while (a < 10) {
>>> printf("d");
>>> }
>>> Вместо 12 как-то можно подставить переменную а?
>> Можно выводить пробелы в цикле (если я правильно понял задачу)
>> for (int j = 0; j < a; ++j) printf("
>> ");
> Ok, вопрос в том , как увеличить пробелы для каждой итерации?for (int a = 0; a < 10; ++a) { // основной цикл: a от 0 до 9
for (int j = 0; j < a; ++j) printf(" "); // вложенный цикл: печатаем a пробелов
}
#include <stdio.h>
main () {char b = 's';
int i = 0;char buf[20];
while (i < 20) {
buf[i]=32;
printf("%s", buf);
printf("%c\n", b);++i;
}}
Собрал пока такое.
Работает верно, но вывод несколько загадочен.
>[оверквотинг удален]
> char buf[20];
> while (i < 20) {
> buf[i]=32;
> printf("%s", buf);
> printf("%c\n", b);
> ++i;
> }
> }
> Собрал пока такое.
> Работает верно, но вывод несколько загадочен.Для начала буфер надо обнулить, иначе при печати будет мусор:
char buf[20] = {0};Не очень понятно, зачем писать
char b = 's';
printf("%c\n", b);
когда это то же самое, что
printf("s\n");И использовать цикл for короче, чем
int i = 0;
while (i < 20) {
...
++i;
}
>[оверквотинг удален]
> char b = 's';
> printf("%c\n", b);
> когда это то же самое, что
> printf("s\n");
> И использовать цикл for короче, чем
> int i = 0;
> while (i < 20) {
> ...
> ++i;
> }Спасибо, я что-то не подумал про вложенный цикл.
Да char b = 's'; это так, не обращайте внимание.
Просто пытаюсь вникнуть в некоторые аспекты си.
В учебных целях... Спасибо еще раз...
> Спасибо, я что-то не подумал про вложенный цикл.
> Да char b = 's'; это так, не обращайте внимание.
> Просто пытаюсь вникнуть в некоторые аспекты си.
> В учебных целях... Спасибо еще раз...Пожалуйста.
>> Спасибо, я что-то не подумал про вложенный цикл.
>> Да char b = 's'; это так, не обращайте внимание.
>> Просто пытаюсь вникнуть в некоторые аспекты си.
>> В учебных целях... Спасибо еще раз...
> Пожалуйста.После php и bash си кажется очень строгим... но чувствую, что надо с некоторыми вещами разобраться.
Вот интересно, я правильно понимаю, что buf[32]={0} - означает, что каждое значение массива символов buf хранит 0
> После php и bash си кажется очень строгим... но чувствую, что надо
> с некоторыми вещами разобраться.Не кажется, так и есть :)
> Вот интересно, я правильно понимаю, что buf[32]={0} - означает, что каждое значение
> массива символов buf хранит 0Да, такая запись инициализирует массив нулями.
> В чистом Си как-то можно динамически изменять отступ в цикле при выводе
> на экран через printf?
> Допустим:
> int a = 1;
> a++;
> while (a < 10) {
> printf("d");
> }
> Вместо 12 как-то можно подставить переменную а?Если я Вас правильно понял, то вы спрашиваете про ширину поля, в котором размещается выводимый аргумент. Ширина эта задаётся числом, располагаемым между знаком % и квалификатором аргумента. Если она не задана, то автоматически задастся поле, достаточное для вывода всех символов аргумента. Если недостаточна - будет так же расширена.
Например. printf ("[%d, %d]", 172, 9); выведет строку "[172, 9]"
A вот printf ("[], ]]", 172, 9); -- строку "[ 172, 9]" (ширина поля 5 символов, выравнивание по правой стороне)
"Динамически" ширину поля можно указывать с помощью подстановочного квалификатора *. В этом случае фактическую ширину поля нужно передавать как один из соответствующих аргументов.
Например: printf ("%*d", w, var); В результате значение переменноый var будет выведено в поле шириной w
Между знаком % и шириной поля так же можно указать символ-заполнитель для поля.
Например, printf ("%#9d", 108) выдаст строку "######108"
>[оверквотинг удален]
> 9]" (ширина поля 5 символов, выравнивание по
> правой стороне)
> "Динамически" ширину поля можно указывать с помощью подстановочного квалификатора *. В
> этом случае фактическую ширину поля нужно передавать как один из соответствующих
> аргументов.
> Например: printf ("%*d", w, var); В результате значение переменноый var будет выведено
> в поле шириной w
> Между знаком % и шириной поля так же можно указать символ-заполнитель для
> поля.
> Например, printf ("%#9d", 108) выдаст строку "######108"Класс! Спасибо ОГРОМНОЕ! Вы все верно поняли. Надо было мне просто точнее сформулировать ... именно подставить квалификатор! Попробую сегодня!
>[оверквотинг удален]
>> "Динамически" ширину поля можно указывать с помощью подстановочного квалификатора *. В
>> этом случае фактическую ширину поля нужно передавать как один из соответствующих
>> аргументов.
>> Например: printf ("%*d", w, var); В результате значение переменноый var будет выведено
>> в поле шириной w
>> Между знаком % и шириной поля так же можно указать символ-заполнитель для
>> поля.
>> Например, printf ("%#9d", 108) выдаст строку "######108"
> Класс! Спасибо ОГРОМНОЕ! Вы все верно поняли. Надо было мне просто точнее
> сформулировать ... именно подставить квалификатор! Попробую сегодня!именно вот так
#include <stdio.h>
main () {int i=0;
int w =1;
while(i !=5) {
i++;
printf("%*d\n", i, w);
}
}
man 3 printf