The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  вход/выход  слежка  RSS
"Printf цикл отступ"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"Printf цикл отступ"  +/
Сообщение от dcc0 on 13-Сен-16, 13:09 
В чистом Си как-то можно динамически изменять отступ в цикле при выводе на экран через printf?
Допустим:
int a = 1;
a++;
while (a < 10) {
printf("d");
}
Вместо 12 как-то можно подставить переменную а?
Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Printf цикл отступ"  +/
Сообщение от f2404 (ok) on 13-Сен-16, 16:00 
> В чистом Си как-то можно динамически изменять отступ в цикле при выводе
> на экран через printf?
> Допустим:
> int a = 1;
> a++;
> while (a < 10) {
> printf("d");
> }
> Вместо 12 как-то можно подставить переменную а?

Можно выводить пробелы в цикле (если я правильно понял задачу)
  for (int j = 0; j < a; ++j) printf(" ");

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Printf цикл отступ"  +/
Сообщение от dcc0 on 13-Сен-16, 17:13 
>[оверквотинг удален]
>> Допустим:
>> int a = 1;
>> a++;
>> while (a < 10) {
>> printf("d");
>> }
>> Вместо 12 как-то можно подставить переменную а?
> Можно выводить пробелы в цикле (если я правильно понял задачу)
>   for (int j = 0; j < a; ++j) printf("
> ");

Ok, вопрос в том , как увеличить пробелы для каждой итерации?

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Printf цикл отступ"  +/
Сообщение от f2404 (ok) on 13-Сен-16, 17:18 
>[оверквотинг удален]
>>> 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 пробелов
}

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Printf цикл отступ"  +/
Сообщение от dcc0 on 13-Сен-16, 18:06 
#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;
    }

}
Собрал пока такое.
Работает верно, но вывод несколько загадочен.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Printf цикл отступ"  +/
Сообщение от f2404 (ok) on 13-Сен-16, 18:14 
>[оверквотинг удален]
>  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;
  }

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Printf цикл отступ"  +/
Сообщение от dcc0 on 13-Сен-16, 18:25 
>[оверквотинг удален]
>   char b = 's';
>   printf("%c\n", b);
> когда это то же самое, что
>   printf("s\n");
> И использовать цикл for короче, чем
>   int i = 0;
>   while (i < 20) {
>     ...
>     ++i;
>   }

Спасибо, я что-то не подумал про вложенный цикл.
Да char b = 's';  это так, не обращайте внимание.
Просто пытаюсь вникнуть в некоторые аспекты си.
В учебных целях... Спасибо еще раз...

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Printf цикл отступ"  +/
Сообщение от f2404 (ok) on 13-Сен-16, 18:28 
> Спасибо, я что-то не подумал про вложенный цикл.
> Да char b = 's';  это так, не обращайте внимание.
> Просто пытаюсь вникнуть в некоторые аспекты си.
> В учебных целях... Спасибо еще раз...

Пожалуйста.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Printf цикл отступ"  +/
Сообщение от dcc0 on 13-Сен-16, 18:31 
>> Спасибо, я что-то не подумал про вложенный цикл.
>> Да char b = 's';  это так, не обращайте внимание.
>> Просто пытаюсь вникнуть в некоторые аспекты си.
>> В учебных целях... Спасибо еще раз...
> Пожалуйста.

После php и bash си кажется очень строгим... но чувствую, что надо с некоторыми вещами разобраться.
Вот интересно, я правильно понимаю, что buf[32]={0} - означает, что каждое значение массива символов buf хранит 0

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "Printf цикл отступ"  +/
Сообщение от f2404 email(ok) on 13-Сен-16, 20:08 
> После php и bash си кажется очень строгим... но чувствую, что надо
> с некоторыми вещами разобраться.

Не кажется, так и есть :)

> Вот интересно, я правильно понимаю, что buf[32]={0} - означает, что каждое значение
> массива символов buf хранит 0

Да, такая запись инициализирует массив нулями.

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "Printf цикл отступ"  +/
Сообщение от Asgard on 14-Сен-16, 19:32 
> В чистом Си как-то можно динамически изменять отступ в цикле при выводе
> на экран через 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"

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

11. "Printf цикл отступ"  +/
Сообщение от dcc0 on 14-Сен-16, 20:07 
>[оверквотинг удален]
>     9]" (ширина поля 5 символов, выравнивание по
> правой стороне)
> "Динамически" ширину поля можно указывать с помощью подстановочного квалификатора *. В
> этом случае фактическую ширину поля нужно передавать как один из соответствующих
> аргументов.
> Например: printf ("%*d", w, var); В результате значение переменноый var будет выведено
> в поле шириной w
> Между знаком % и шириной поля так же можно указать символ-заполнитель для
> поля.
> Например, printf ("%#9d", 108) выдаст строку "######108"

Класс! Спасибо ОГРОМНОЕ! Вы все верно поняли. Надо было мне просто точнее сформулировать ... именно подставить квалификатор! Попробую сегодня!

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

12. "Printf цикл отступ"  +/
Сообщение от dcc0 on 14-Сен-16, 20:30 
>[оверквотинг удален]
>> "Динамически" ширину поля можно указывать с помощью подстановочного квалификатора *. В
>> этом случае фактическую ширину поля нужно передавать как один из соответствующих
>> аргументов.
>> Например: 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);
    }
}

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

13. "Printf цикл отступ"  +/
Сообщение от Led (ok) on 15-Сен-16, 22:40 
man 3 printf
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру