The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Printf цикл отступ, !*! dcc0, 13-Сен-16, 13:09  [смотреть все]
В чистом Си как-то можно динамически изменять отступ в цикле при выводе на экран через printf?
Допустим:
int a = 1;
a++;
while (a < 10) {
printf("d");
}
Вместо 12 как-то можно подставить переменную а?
  • Printf цикл отступ, !*! f2404, 16:00 , 13-Сен-16 (1)
    > В чистом Си как-то можно динамически изменять отступ в цикле при выводе
    > на экран через printf?
    > Допустим:
    > int a = 1;
    > a++;
    > while (a < 10) {
    > printf("d");
    > }
    > Вместо 12 как-то можно подставить переменную а?

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

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

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

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

        • Printf цикл отступ, !*! dcc0, 18:06 , 13-Сен-16 (4)
          #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;
              }

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

          • Printf цикл отступ, !*! f2404, 18:14 , 13-Сен-16 (5)
            >[оверквотинг удален]
            >  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;
              }

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

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

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

                Пожалуйста.

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

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

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

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

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

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

  • Printf цикл отступ, !*! Asgard, 19:32 , 14-Сен-16 (10)
    > В чистом Си как-то можно динамически изменять отступ в цикле при выводе
    > на экран через 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"

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

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

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

  • Printf цикл отступ, !*! Led, 22:40 , 15-Сен-16 (13)



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

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