0

我正在尝试使用字符串,但遇到了无法调试的问题。

该脚本的目标是对一个字符串运行 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
}

如果您不超过 Max 或 Min 设置,它可以 100% 正常工作。如果你这样做了,程序会阻止你并要求你重新输入你的字符串(应该如此),但有些东西会延续。

  • 例如,如果您将“ End ”写为字符串,它会要求您重新输入,因为它只有 3 个字符。
  • 如果您将下一个字符写为“ The End ”,它将给您 3 个字符(不正确,应该是 7 个字符;包括空格。)
  • 现在再次写“ The End ”会给你正确的字符数。
  • 测试看看是不是真的在看你之前写的《The End》,其实不是。所以我必须假设问题出在对递归的一些逻辑循环监督中。

感觉就像程序在递归中的if 语句上搞砸了(这就是我可以缩小问题的范围),我一生无法理解为什么@__@ 到目前为止,我已经尝试清除字符串输出使用

str[0]='\0';

并且几乎在任何地方都铺板,但无济于事:(真的很感激帮助!学习很有趣,但是当你没有任何办法知道真正出了什么问题时会令人沮丧。

感谢您的阅读!


编辑:移到whichstr[i+1]='\0';i++;将为每次尝试在字符串前面设置一个空值。原来问题在于它会为工作和不工作的字符串设置一个空值,因为它被放置在一个不好的位置。为此感谢戴夫

如果您有一些有趣的见解或要添加的其他答案,我一定会阅读它!:)

4

1 回答 1

1

您需要return在进行递归之后:

void String_Insert_Recursion(char str[])
{
    int i=0;
    while ((str[i] = getchar()) != '\n')
        i++;
    if (i < SIZE && i>=MIN_SIZE) {
        str[i+1]='\0';
    } else {
        printf("Incorrect number of characters. Please Reenter\n");
        String_Insert_Recursion(str);
    }   
}
于 2013-04-14T19:34:51.200 回答