#c
#c
Вопрос:
Я хочу напечатать оператор n
несколько раз без использования цикла.
#include<stdio.h>
#include<conio.h>
void show(char *n,int count);
void main()
{
int x=10;
char name[20]="zeeshann";
clrscr();
show (name,10);
getch();
}
void show(char *n,int count)
{
while(count>0)
{
printf("%sn",n);
count--;
}
}
Это мой код, в котором я печатаю строку 10 раз, используя цикл while.
Как можно распечатать его 10 раз без использования while
или любого цикла?
Комментарии:
1. Единственным другим вариантом является рекурсивная функция (или копировать-вставлять
printf
10 раз, но, пожалуйста, не делайте этого).2. что касается инструкции:
void main()
это недопустимая подпись дляmain()
(хотя некоторые несовместимые компиляторы разрешат это.) Единственными допустимыми подписями являются:int main( void )
иint main( int argc, char *argv[] )
Ответ №1:
Вы можете сделать это с помощью рекурсивной функции.
Рекурсивная функция — это функция, которая вызывает саму себя во время выполнения. Процесс может повторяться несколько раз, выводя результат и конец каждой итерации.
Удалите цикл while из метода show() и используйте условие if .
Он будет непрерывно вызывать метод до тех пор, пока условие if не станет ложным,
void show(char *n,int count)
{
if(count>0)
{
printf("%sn",n);
count--;
show(n,count);
}
}
Для лучшего понимания, полный код,
#include<stdio.h>
#include<conio.h>
void show(char *n,int count);
void main()
{
int x=10;
char name[20]="zeeshann";
clrscr();
show (name,10);
getch();
}
void show(char *n,int count)
{
if(count>0)
{
printf("%sn",n);
count--;
show(n,count);
}
}
Комментарии:
1. Да, это рекурсивный эквивалент цикла. Но было бы лучше предупредить, что, когда это возможно в реальном программировании, мы предпочитаем итеративные методы рекурсивным.
2. Ваш ответ был бы немного лучше с объяснением того, что вы делаете, а не только с указанием кода для копирования и вставки. Например, было бы полезно включить хотя бы упоминание о рекурсии , чтобы помочь OP (и другим) что-то искать.
Ответ №2:
#include <stdio.h>
#include <setjmp.h>
jmp_buf buf;
int main() {
int x = 1;
setjmp(buf); //set the jump position using buf
printf("KrishnaKanthn"); // Prints a name
x ;
if (x <= 5)
longjmp(buf, 1); // Jump to the point located by setjmp
return 0;
}
Вывод:
KrishnaKanth
KrishnaKanth
KrishnaKanth
KrishnaKanth
KrishnaKanth
Другой метод: многократный вызов main
#include<stdio.h>
int main()
{
static int counter = 1; // initialized only once
printf("KrishnaKanthn");
if(counter==5)
return 0;
counter ;
main();
}
Вывод:
KrishnaKanth
KrishnaKanth
KrishnaKanth
KrishnaKanth
KrishnaKanth