Итак, я пытаюсь вывести отформатированную строку пирамиды Марио, то есть:с Е (% * s) объяснение
##
###
####
Точки представляют пробелы. Высота определяется пользователем во время выполнения. Следующий код - это то, что я нашел для работы.
#include <stdio.h>
void hash(void) {
printf("%s", "#");
}
int main(void) {
int height;
printf("%s", "Enter height of mario's pyramid: ";
scanf("%i", &height);
for (int i = 0; i < height; i++) {
int spaces;
if (height == 1 || i == (height - 1) {
spaces = 0;
}
else {
spaces = height - (i + 1);
printf("%*s", spaces, " ");
}
for (int j = 0; j < (i + 1); j++) {
hash();
}
printf("\n");
}
return 0;
}
Теперь, когда вы видите, что работает, давайте посмотрим что-то, что не работает, все то же самое, кроме циклов for.
#include <stdio.h>
void hash(void) {
printf("%s", "#");
}
int main(void) {
int height;
printf("%s", "Enter height of mario's pyramid: ";
scanf("%i", &height);
for (int i = 0; i < height; i++) {
int spaces;
spaces = height - (i + 1);
printf("%*s", spaces, " ");
for (int j = 0; j < (i + 1); j++) {
hash();
}
printf("\n");
}
return 0;
}
Итак, как вы можете видеть, единственное отличие состоит в условные операторы, устанавливая пробелы в 0, если height == 1
или i == height - 1
, но результат совершенно иной. По какой-то причине при использовании условных операторов пространство, похоже, не печатает, что на самом деле то, что я хотел, но я уверен, что это не то, как я должен это делать. Поэтому мне было интересно, знает ли кто, что именно происходит здесь, и может объяснить это мне.
Okay. Поэтому, я думаю, я должен быть более конкретным. Почему работает первая программа? Пробелы должны печатать, но они не являются Weird! –
@TimBeyer Они не печатаются в первом случае, потому что вызов 'printf' находится внутри' '' '' '' '' '' '' '' '', поэтому он никогда не вызывается. – dbush
Он вызывается и печатает пробелы, кроме случаев, когда height == 1 и i == height -1. –