Я пытаюсь создать массив шаблонов для треугольника, который я также печатаю на консоли. Я делаю это, создавая массив 2d char, где шаблоны символов [number_of_patterns] [pattern_lengths]. Я передаю это функции, которая принимает шаблоны массива вместе с высотой треугольника, который я пытаюсь сделать.Заполнение строки с помощью sprintf, C
void printTriangle (int rows, char rowPatterns[][rows]) {
int initialSpaces = rows - 1;
int numberOfAsterisks = 1;
int i;
for (i = 0; i < rows; i++) {
char temp[rows];
int spaceCounter = 0;
int asteriskCounter = 0;
while (spaceCounter < initialSpaces) {
printf(" ");
sprintf(temp, " ");
spaceCounter++;
}
while (asteriskCounter < numberOfAsterisks) {
sprintf(temp, "*");
printf("*");
asteriskCounter++;
}
while (spaceCounter < initialSpaces) {
spaceCounter = 0;
sprintf(temp, " ");
spaceCounter++;
}
strcpy(rowPatterns[i], temp);
printf("\n");
initialSpaces--;
numberOfAsterisks+=2;
}
}
Для каждой строки треугольника, который я печатаю, я создаю строку для этой строки под названием temp. В конце цикла for, который печатает строку в консоли, и sprintf это к temp массива, я strcpy temp в шаблоны [i]. Затем я возвращаюсь к вершине цикла, повторно инициализирую temp, чтобы сделать его новым, и зацикливаюсь до тех пор, пока у меня не будет всех моих строк. За исключением того, что спринт не заполнит мой массив temp. Является ли это неправильным использование функции, или она должна выполнять w мой параметр передачи?
Здесь нет необходимости использовать 'sprintf' - все, что вы добавляете, - это постоянные строки без форматов, поэтому вы можете просто использовать' strcpy'. И все они являются одиночными символами, поэтому вы можете просто назначить эти одиночные символы. – hobbs
@hobbs: вы могли бы, но я лично лично считаю API 'sprintf' более приятным для построения строк, так как вы просто используете идиом' ptr + = sprintf (ptr, ...) '. – nneonneo