我正在尝试使用字符串,但遇到了无法调试的问题。
该脚本的目标是对一个字符串运行 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++;
将为每次尝试在字符串前面设置一个空值。原来问题在于它会为工作和不工作的字符串设置一个空值,因为它被放置在一个不好的位置。为此感谢戴夫!
如果您有一些有趣的见解或要添加的其他答案,我一定会阅读它!:)