c printf довольно форматирование печати - PullRequest
0 голосов
/ 11 июля 2011

Я печатаю серию линий. Длина строк различна. Иногда мне приходится добавлять пробелы в конце строки, чтобы выровнять линии. И в конце каждой строки я добавляю символ "\ n"Проблема в том, что новая строка после "\ n" начинается после пробелов на следующей строке.Это странно.Любые предложения или комментарии приветствуются.

switch(struct.var1) {
    case 0:
switch(struct.var2)
{
case 1: printf("xyx");break;
case 2: printf("abc");break;
}
break;
case 2: printf("xyz");break;
case 3: printf("xyz");break;
.
.
.
.
.
.
.
.
.
.
.
.
.
.
case n: printf("XYZ           ");break;
case m:printf("ABC           ");break;
case 0xff:
switch(struct.var2)
{
    case 1: printf("MNO  ");
    case 2: printf("QRS   ");
}
}//end of switch case.

printf("\n");

Пожалуйста, найдите фрагмент кода выше.Это явно проблема выравнивания с printf. Я действительно не могу обнаружить никаких проблем с кодом.

Ответы [ 2 ]

2 голосов
/ 11 июля 2011

Код, который вы разместили, на самом деле недостаточен для диагностики проблемы, но мой совет - обойти ее.Вместо того, чтобы печатать пробелы после вашей строки, чтобы выполнить выравнивание, укажите поле правильной ширины для вашей строки.

Другой момент, который я хотел бы сделать, это использовать массив вместо оператора switch, если выможет:

char *strings[256][2] = {
    {"xyz", "abc"},
    // ...
    {"MNO", "QRS"}
};

// print selected string left justified in a 7-character wide field.
printf("%-7s\n", strings[struct.var1][struct.var2]);

Из кода, который вы опубликовали, не ясно, являются ли значения, участвующие в выборе строк, полностью смежными.Если они не совсем смежные, но все же довольно плотные (то есть вы используете большинство, но не все значения), может быть проще всего просто заполнить неиспользуемые места пустыми строками и по-прежнему использовать массив.

2 голосов
/ 11 июля 2011

Вы на Windows?Возможно, вам придется добавить \r в конец вашей строки, а также \n.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...