0

自分自身をn回印刷するCプログラムを作成しましたが、同じn回を逆印刷する方法を取得できません。たとえば、サンプルプログラムが次の場合:

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

3 に答える 3

3

これは純粋なクワインではありません。ウィキペディアのQuineの記事を参照してください。

クワインは入力を取りません。入力を許可すると、キーボードを介してソースコードをプログラムにフィードしたり、プログラムのソースファイルを開いたりすることができます。

于 2010-09-12T06:07:39.223 に答える
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);}
于 2011-02-26T14:49:40.610 に答える
1

最も簡単な方法は、ファイルを配列に読み込んで(この回答のように)、配列を逆にすることです。

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)));
  }
}
于 2010-09-12T06:11:30.647 に答える