文字列を試してみたところ、デバッグできない問題が発生しました。
このスクリプトの目的は、1 つの文字列に対して 5 つのテストを実行し、各文字列の文字列の長さを検出しながら、文字列にパラメーター (入力する最小文字数と最大文字数) を指定することです。問題の文字列はstr[] です。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 11
#define MIN_SIZE 5
void String_Insert_Recursion(char str[]);
int main(int argc, char *argv[])
{
char str[SIZE];
int i, str_lenght;
printf("Enter a string of %i to %i characters:\n", MIN_SIZE, SIZE-1);
for (i=0; i<5 ; i++)
{
String_Insert_Recursion(str);
str_lenght = strlen(str);
printf("This string is %i long\n", str_lenght-1);
}
system("PAUSE");
return 0;
}
void String_Insert_Recursion(char str[])
{
int i=0;
while ((str[i] = getchar()) != '\n')
i++;
if (i>SIZE-1 || i<MIN_SIZE)
{
//SIZE-1 so that there's still ONE spot on the string for a null value.
printf("Incorrect number of characters. Please Reenter\n");
String_Insert_Recursion(str);
}
str[i+1]='\0';
//This sets the null value at the end of the string
}
最大または最小の設定を超えない限り、100% 正常に動作します。プログラムは停止し、文字列を再入力する場合は再入力するように求めますが (そうあるべきです)、何かが引き継がれます。
- たとえば、文字列として「End」と書くと、3文字しかないので、それを入れ直すように求められます。
- 次の文字を「 The End 」と書くと、 3 文字になります (これは正しくありません。7 文字のはずです。スペースを含めてください)。
- 「 The End 」をもう一度書くと、正しい文字数が得られます。
- あなたが書いた前回の「 The End 」を本当に読んでいるかどうかをテストしましたが、そうではありません。したがって、問題は再帰の論理ループの見落としにあると想定する必要があります。
プログラムが再帰のif文をいじっているように感じます(問題を絞り込める範囲です)、なぜ私の中で一生理解できません@__@これまで、私はクリアしようとしましたを使用して文字列
str[0]='\0';
そして、事実上どこでもそれを板張りしても無駄です:(本当に助けていただければ幸いです! 学ぶことは興味深いですが、実際に何がうまくいかないのかについての手がかりを得る方法がないとイライラします.
読んでくれてありがとう!
EDIT :試行ごとに文字列の前に null 値を設定するのstr[i+1]='\0';
下に移動しました。i++;
問題は、動作中の文字列と動作していない文字列の両方に null 値が設定されることでした。これについてデイブに感謝します!
興味深い洞察や追加する別の回答があれば、私は間違いなくそれを読みます! :)