Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> sprintf: форматированный вывод, выравнивание колонки 
V
    Опции темы
Alca
Дата 26.3.2009, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



sprintf: форматированный вывод, как?

Надо сделать так, чтоб 2-ая колонка была выровняна по левому краю:

row_11111          row_dsfgabcde
row_12                row_dfgsdabcded
row_123345000  row_abcdesdcfsdf
row_1234            row_abcdewer
row_12345          row_abcde

Это сообщение отредактировал(а) Alca - 26.3.2009, 18:10


--------------------
PM WWW ICQ Skype Jabber   Вверх
Acer
Дата 26.3.2009, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: нет
Всего: 8



Добавляй '\t' или "\t\t" в начале каждой строки второй колонки
PM MAIL   Вверх
Alca
Дата 26.3.2009, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Цитата

Добавляй '\t' или "\t\t" в начале каждой строки второй колонки

Съезжает строка:
row_11111          row_dsfgabcde
row_12                row_dfgsdabcded
row_123345000  row_abcdesdcfsdf
row_1234            row_abcdewer
row_12345              row_abcde     <<<<<<<<<<<<<


--------------------
PM WWW ICQ Skype Jabber   Вверх
586
Дата 26.3.2009, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 10
Всего: 146



Код
char buf[260];
sprintf(buf, "'%-10s'", "asdf");
Caption = buf;

PM   Вверх
Acer
Дата 26.3.2009, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: нет
Всего: 8



Цитата(586 @ 26.3.2009,  17:20)
Код
char buf[260];
sprintf(buf, "'%-10s'", "asdf");
Caption = buf;

У меня так не работает...
А вот тако вот:
Код

    sprintf( buf, "Hello %10d \nHello123 %8d", 10, 234 );
    printf( buf );

Только тут придется определять длинну строки, чтобы поставить достаточное количество пробелов...
тут написанно, как оно должно работать.
PM MAIL   Вверх
586
Дата 26.3.2009, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 10
Всего: 146



Alca, то есть, распечатываешь таблицу в таком формате:
"%-10s %s"

Цитата(Acer @  26.3.2009,  18:38 Найти цитируемый пост)
У меня так не работает...

Какая ОС, какой компилятор? Что выводится в результате?
PM   Вверх
Alca
Дата 26.3.2009, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Не %-10s а %+10s.
Поставил для каждой строки свой интервал (+7s, +3s, +5s, ...) - в MessageBox одна строка вылазит, а когда скопировал содержимое бокса в файл, то вылазит другая строка...
 smile

Добавлено через 2 минуты и 43 секунды
Цитата

акая ОС, какой компилятор?

С++ Builder 6.0, WinXP SP3

Это сообщение отредактировал(а) Alca - 26.3.2009, 18:47


--------------------
PM WWW ICQ Skype Jabber   Вверх
Acer
Дата 26.3.2009, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: нет
Всего: 8



Цитата(586 @ 26.3.2009,  17:42)
Какая ОС, какой компилятор? Что выводится в результате?

ОС - WinXP, компилятор - GCC.
В результате получается вывод строк без форматирования. То есть не в виде таблицы.
Я сделал вот как:
Код

        sprintf( buf, "Row1 %-10s %s \nRow123 %-8s %s", " ", "Column", " ", "Column" );
    printf( buf );

То есть спецификатор %-10s устанавливается для пробелов. Тогда форматируется. Пробелы выводятся перед вторым столбцом

Это сообщение отредактировал(а) Acer - 26.3.2009, 18:51
PM MAIL   Вверх
Alca
Дата 26.3.2009, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



скриншот

Это сообщение отредактировал(а) Alca - 26.3.2009, 18:55


--------------------
PM WWW ICQ Skype Jabber   Вверх
Acer
Дата 26.3.2009, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: нет
Всего: 8



Alca, какой код такое вызывает?
PM MAIL   Вверх
Alca
Дата 26.3.2009, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Цитата

Alca, какой код такое вызывает?

Это я делаю свою реализацию assert-a...


--------------------
PM WWW ICQ Skype Jabber   Вверх
586
Дата 26.3.2009, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 10
Всего: 146



Результаты теста: http://codepad.org/dRQXcMhm
PM   Вверх
Alca
Дата 26.3.2009, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Цитата

Результаты теста: http://codepad.org/dRQXcMhm

А ты поробуй с двумя, тремя колонками и чтоб строки были разной длины.

Добавлено через 4 минуты и 29 секунд
Мне хотя бы чтоб в мсжбоксе нормально выводило smile 


--------------------
PM WWW ICQ Skype Jabber   Вверх
586
Дата 26.3.2009, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 10
Всего: 146



Код
#include <stdio.h>

const char *table[][3] =
{ {"aaa", "bbb", "ccc"},
  {"dddd", "e", "fffff"},
  {"ddddddddddddddd", "mmmm", "gggggg"},    // здесь заехало, и это нормально. нужно корректировать длину строки.
  {"", "", "aaaa"}
};

int main(int argc, char* argv[])
{
    int i;
    for(i = 0; i < sizeof(table)/sizeof(table[0]); ++i)
    {
        printf("%-10s %-10s %s\n", table[i][0], table[i][1], table[i][2]);
    }
    getchar();
    return 0;
}

Код

aaa        bbb        ccc
dddd       e          fffff
ddddddddddddddd mmmm       gggggg
                      aaaa

http://codepad.org/3mupZOkM
Цитата
Мне хотя бы чтоб в мсжбоксе нормально выводило

Там шрифт не моноширинный (т.е. буквы разного размера).

Это сообщение отредактировал(а) 586 - 26.3.2009, 19:22
PM   Вверх
zim22
Дата 26.3.2009, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(Alca @  26.3.2009,  18:07 Найти цитируемый пост)
sprintf: форматированный вывод, как?

может Вам снова С++ вариант подойдёт smile
Код

using namespace std;
cout << left << setw(10) << "hello" << setw(25) << "IamVeryGladToSeeYou" << setw(5) << "12" <<  endl;
cout << setw(10) << "hello" << setw(25) << "invader" << setw(20)  << "i love you" <<  endl;

Сначала Вы устанавливаете ширину поля, а потом уже записываете внутрь "поля" переменную.
С помощью модификатора left происходит выравнивание по левой границе поля. По правой границе - right

Это сообщение отредактировал(а) zim22 - 26.3.2009, 20:51


--------------------
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1035 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.