これは私がデコードされた署名コードです:このコードの逆のプロセスですか?
#include<stdio.h>
int i;
double q[]={6627601.1454013166};
int main()
{
if(1000.0-i++)
{
main();
}
else
{
puts(q);
}
}
私はC言語で初心者ですので、あなたは[再帰ほか]正確にコード内で何が起こっているかを説明してくださいだろうか?
私の名前を印刷するのに似たプログラムを作成したいのであれば、数字を生成する手順は何ですか? は、私は次のことを試してみました: CODE1:
#include<stdio.h>
int main()
{
double a;
scanf("%s",&a);
printf("%lf\n",a);
}
CODE2:
#include<stdio.h>
int i;
double q[]={31711421078673377979858439824814601270188287470225555299667257024608266243979287542515985597401536215834733576192.000000};
int main()
{
if(1000.0-i++)
{
main();
}
else
{
puts(q);
}
}
なぜ第二のコードのみ8つの文字のための出力を与えていますか? [7文字まで入力すれば0.000000、それ以上の場合は8と同じ結果が得られます]
入力によっては13桁しか生成されないものもあれば、生成するものもあります119桁! #@#@ ???
この巨大な数字を私の名前の15-20桁に減らすにはどうすればよいですか?
[私は既に最初の13桁を持っているので、あなたの特別な番号の最後の4桁を取得するにはどうすればよいですか?
あなたのコードは浮動小数点型を文字列のように使用します。悪いことが起こるでしょう。文字列 '3.14'を呼び出して、その中から「3.14」を得ることはできません。文字列をダブルにスキャンする場合は、コアダンプを要求しています。 – mah
あなたはそこに行きたくありません....しかし。真剣に、これは変数の記憶、メモリのレイアウトと浮動小数点の表現について毛深い詳細にたくさん入ります。初心者の方は、言語を悪用する方法を理解するよりも、良いコーディング方法を学ぶ方が良いです。 – AShelly
魔法の数字のIEEE表現を16進数で見ると、0x41594844494E4153が得られます。 LSBから始めて各バイトをasciiとして取ると、SANIDHYAが得られます。 8文字の制限は、doubleが8バイトであるためです。私はメインでの再帰が間違っていると思う。スタックのオーバーフローの前に再帰が終了し、名前の後に余分な文字がないという事実は、コンパイラの特定の実装の詳細であり、任意のシステムで失敗する可能性があります。 – AShelly