#c #for-loop
#c #для цикла
Вопрос:
Я пытаюсь напечатать следующий шаблон:
@@@@@@@@
@@@@@@@
@@@@@@
@@@@@
Однако вместо этого я получаю это:
@ABCDEFG
ABCDEFG
BCDEFG
CDEFG
Я не уверен, что я делаю неправильно. Я был бы признателен за любые отзывы или указания.
#include <stdio.h>
#define ROWS 4
#define CHARS 8
int main(void)
{
for(int row = 0; row < ROWS; row )
{
for(char ch = ('@' row); ch < ('@' CHARS); ch )
printf("%c", ch);
printf("n");
}
return 0;
}
Комментарии:
1. Вы пробовали отлаживать свой код?
2. Я использую текстовый редактор, и поэтому в нем нет отладчика.
3. Как ты думаешь
'@' row
, что это значит?4. независимо от того, какой текстовый редактор вы использовали, для компиляции, очевидно, вам нужно использовать компилятор, который, скорее всего, будет иметь отладчик рядом
5. @DDKGM Получите бесплатную среду разработки с хорошим компилятором / отладчиком — для каждой платформы их несколько. Вы не можете научиться писать код, не изучив отладку.
Ответ №1:
Оператор работает не так, как вы думаете. @
преобразуется в его значение ASCII (64), затем вы добавляете row
. Когда row
есть 2
, вы говорите: выведите символ, который соответствует числу (64 2), которое есть A
.
Я бы изменил внутренний цикл на что-то вроде этого:
for(int ch = row; ch < CHARS; ch ) {
printf("%c", '@');
}
printf("n");
Ответ №2:
Почему вы усложняете second for
этим символом. Это может быть просто
for(int col = row; col < CHARS; col )
printf("%c", '@');
Комментарии:
1. Или
printf("@");
или дажеputchar('@');
%c
преобразование бессмысленно, когда печатаемый символ является константой.2. @user3386109 Мне просто не нужно путать спрашивающего с новой функцией
putchar
, но это, конечно, отличная альтернатива. С другой стороны, я считаюprintf("@")
потенциально небезопасным. Он может передумать и изменить символ с@
на%
, и он будет потерян.3. @user3386109 Хороший компилятор сгенерирует тот же код для
printf("%c", '@');
,printf("@");
,putchar('@');
. Лучше всего использовать то, что имеет смысл для контекста большего кода, и позволить компилятору обрабатывать эти небольшие оптимизации.
Ответ №3:
Измените ch на ‘@’ printf("%c", '@');