2010-09-12 2 views
0

я написал программу, которая печатает C себя п раз, но я не могу получить, как обратный Печатает то же самое п times.Eg, если программа образец:Как Обратить Куайн?

hello 

, то требуемая мощность должна быть "olleh" for n=1. Вот моя программа Куайн,

#include <stdio.h> 
int main() 
{ 
    int n; 
    char c; 
    FILE *f; 
    f=fopen(__FILE__,"r"); 
    scanf("%d",&n); 
while(n--) 
{ 
while((c=getc(f))!=EOF) 
putchar(c); 
fseek(f,0,0); 
} 
    return 0; 
} 
+0

Я думаю, что это считается обманом, если вы читаете с диска с quine. –

ответ

1

Проще всего было бы прочитать файл в массив (как этот answer), а затем просто обратный массив:

void swap(char* a, char* b) { 
    char tmp = *b; 
    *b = *a; 
    *a = tmp; 
} 

void reverse(char* arr, int size) { 
    for (int i = 0; i < size/2; ++i) { 
    swap(arr+i, arr + (size - (i + 1))); 
    } 
} 
3

Это не чистый Куайн. См. the Quine article in Wikipedia:

Куин не принимает вход. Разрешение ввода позволило бы подавать исходный код в программу с помощью клавиатуры , открывая исходный файл программы и аналогичные механизмы.

2

Просто наткнулся на этот пост. Вот пример обратного хода в C, который я сделал. Вы можете изменить его в соответствии с вашими потребностями!

a="};)01(rahctup;)--p*(rahctup);p*;43=p*(rof;)a(ftnirp;))a,b=p(tacrts(nelrts=+p{)p*rahc(niam;}7393422{=]99[b;";b[99]={2243937};main(char*p){p+=strlen(strcat(p=b,a));printf(a);for(*p=34;*p;)putchar(*p--);putchar(10);}