Хочу написать код для печати ромба из звезд на языке c Я написал код, который дает желаемый результат. :
#include <stdio.h>
int main()
{
int n, i, j, K;
printf("Enter no. of rows; ");
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n - i + 1; j++)
{
printf(" ");
}
for (int k = 1; k <= n; k++)
{
printf("*");
}
printf("\n");
}
return 0;
}
Но я хочу получить тот же результат другим способом. Итак, я написал другой код, ожидая того же результата, что и ниже.
Я пробовал этот код:
#include <stdio.h>
int main()
{
int n, a, i, j;
printf("Enter no. of rows: ");
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
for (int j = n - i + 1; 2 * n - i >= j > n - i; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
Я ожидал желаемого результата, который пришел для кода, написанного выше.Но в результате получился вот такой вывод. Итак, я в замешательстве. Почему это случилось? Пожалуйста, объясни.
Второй код не печатает пробелов, как вы ожидаете, что он напечатает то же самое?
Если у вас есть простой код, который работает, все готово. Попытка написать более сложный, трудный для чтения код не является целью. (Если вы не участвуете в Международном конкурсе запутанного кода C ioccc.org).
что вы ожидаете от 2 * n - i >= j > n - i





Ваше тестовое выражение во внутреннем цикле for имеет неверный формат. Математически правильно, но дает нежелательные результаты в c.
Должен быть:
for (int j = n - i + 1; 2 * n - i >= j && j > n - i; j++)
Причина в том, что логические операторы имеют арность 2 и оцениваются слева направо.
Как на самом деле оценивается ваш код, так это (2 * n - i >= j) > n - i
Итак, вы сначала оцениваете (2 * n - i >= j), которое становится 1 (Истина), затем вы оцениваете 1 > n - i
Вот почему вы видите ***** только в строке i=5.
(У вас все еще есть проблема с тем, что ваши звездочки не имеют правильного отступа, для этого вам нужно печатать пробелы впереди.)
НЕ размещайте изображения кода, данных, сообщений об ошибках и т. д. - скопируйте или введите текст в вопрос. Как спросить