2010-09-12 7 views
0

i ont écrit un programme C qui s'imprime n fois, mais je ne peux pas comment inverser la même impression n times.Eg, si le programme d'échantillonnage est:Comment faire pour inverser Quine?

hello 

alors la sortie requise devrait être "olleh" for n=1. Voici mon programme de Quine,

#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

Je pense que c'est considéré comme de la triche si vous lisez du disque avec un quine. –

Répondre

1

La façon la plus simple serait de lire le fichier dans un tableau (comme celui-ci answer), et puis juste inverser le tableau: Juste

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

Ce n'est pas un pur Quine. Voir the Quine article in Wikipedia:

Un quine ne nécessite aucune entrée. En autorisant l'entrée , le code source peut être envoyé au programme via le clavier, en ouvrant le fichier source du programme et des mécanismes similaires.

2

suis tombé sur ce poste. Voici un exemple de quine inverse dans C, que j'ai fait. Vous pouvez le modifier pour répondre à vos besoins!

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);}