Могу ли я получить некоторую помощь в выполнении домашней работы, связанной с контр-контролируемым повторением и аргументами? - PullRequest
1 голос
/ 07 марта 2009

Хорошо, мне нужно, чтобы выходные данные были похожи на ромб звездочек, причем каждый ряд увеличивался на 2 звездочки, пока в середине не появилось 9 звездочек ... и затем ряды уменьшились. Функция main должна быть:

int main (void){  
   int i;    
   i = 0;  
   while (i < 5){  
      printline (4-i, i*2+1);  
      i = i + 1;  
   }  
   i = 3;  
   while (i >= 0) {  
      printline (4-i, i*2+1);  
      i = i - 1;  
   }  
   return 0;  
}  

Теперь я должен определить функцию printline для печати одной строки рисунка при каждом его вызове. Требуется 2 аргумента, количество пробелов и количество звездочек, которые должны быть напечатаны в строке. Используйте счетчик с контролируемым повторением, чтобы напечатать соответствующее количество пробелов и еще раз, чтобы напечатать соответствующее количество звездочек.

char print_line (int spaces, int stars){  
   for (int i = 4; i>=spaces; i--){  
      printf(" ");  
   }  
   for (int i = 1; i<=stars; i+=2){  
      printf("*");  
   }  
   printf("\n");  
}

Woohoo! Я почти закончил! Выводы вроде как правильные, за исключением того, что вместо строки с 4 пробелами со звездой, строки с 3 пробелами с 3 звездами и т. Д., Вплоть до пробелов и 9 звезд (и затем наоборот) ... Я получаю строку со звездой, линией с пробелом и 2 звездами, линией с двумя пробелами, тремя звездами и т. д., до 4 пробелами по пять звезд (и затем обратными) ...
Причина в том, что printline отличается, потому что у меня иногда возникают проблемы с написанием, и я продолжал получать курсив всякий раз, когда пытался написать ...

1 Ответ

5 голосов
/ 07 марта 2009

Некоторые подсказки:

  • Ваша функция должна печатать только символы, она ничего не возвращает (для этого есть определенный тип возврата)
  • Количество пробелов и количество печатаемых звездочек, вероятно, целые числа
  • Вы можете напечатать один пробел, используя printf(" ");
  • Вы можете напечатать одну звезду, используя printf("*");
  • Вы можете напечатать "новую строку" (которая переходит на следующую строку), используя printf("\n");
  • Если вы скажете int i=0; for(i=0; i<n; i++) { printf("X"); }, вы напечатаете письмо X всего n раз (вы, возможно, не научились зацикливаться на этом этапе; если нет, воспользуйтесь следующей подсказкой)
  • Если вы скажете int i=0; while(i<n) { printf("X"); i++; }, вы также напечатаете письмо X всего n раз
  • Вы будете намного счастливее, если будете использовать имена параметров, отличные от a и b. Попробуйте придумать имя, которое соответствует тому, что параметр представляет .

Ответ на ваше редактирование:

  • Вы захотите использовать две отдельные петли; тот, который печатает пробелы, а затем тот, который печатает звезды
  • for Циклы всегда создаются с одним инициализатором, одним условием проверки и одним шагом / шагом
  • Вам не нужно присваивать значения stars или spaces; это числа, которые вам дает тот, кто вызывает вашу функцию printline (т.е. они уже имеют значение)

Ответ на ваше второе редактирование:

  • В ваших циклах for вы, вероятно, захотите использовать индексную переменную , отличную от передаваемого параметра (например, for(i=0; i<spaces; i++), где i это просто счетчик, который вы объявляете сверху вашей функции, как в коде из назначения) В вашей текущей конструкции он будет пытаться напечатать 4 пробела, независимо от того, что указал вызывающий объект, когда они вызвали вашу функцию.
  • Вам нужно вывести символ новой строки только один раз, после , вы закончили со всеми пробелами и звездами (т.е. вывод новой строки не принадлежит внутри цикла for)
  • Возможно, вам нужно увеличивать счетчик только на 1 каждый раз, когда вы выводите звезду.
  • Если присваивание говорит о создании функции с именем printline, вы не можете вызвать ее print_line; это не одно и то же (и не PrintLine)

Ответ на ваше третье редактирование:

  • Не забывайте: «Возможно, вам нужно увеличивать счетчик только на 1 каждый раз, когда вы выводите звезду».
  • Не забывайте: «Ваша функция нуждается только в печати символов, она ничего не возвращает (для этого есть определенный тип возвращаемого значения)» (т. Е. Она не должна возвращать char)
  • Я думаю, вы хотите, чтобы код, который печатает пробелы, больше походил на код, который печатает звезды
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...