【问题标题】:for loop not working - the outer loop not iteratingfor 循环不工作 - 外循环不迭代
【发布时间】:2015-02-03 06:44:22
【问题描述】:

我想编写一个程序来重复一个字符串并获得一个重叠的(在每次迭代中删除父字符串的第一个元素)子字符串 23 个元素。我认为外循环不起作用。请帮助我了解发生了什么。

这是我使用的代码的相关部分。

char *copy = (char*)malloc(sizeof(char)*(length+1));
strcpy(copy, seq);

printf("%s\n %d", copy, strlen(copy));  
char temp[26]= "";
int templen=0;
for (int k=0; k>length; k++)    
{   

    for (int i=0; i< 23; i++)   
    {
        templen = strlen(temp);         
        temp[templen]=copy[i];  
        templen++;                  
    } 

    temp[templen+1] = '\0';
    printf("%s\n", temp);
    temp[0]='\0';
    copy++;
    printf("%s\n %d", copy, strlen(copy));  
}

free(seq);

【问题讨论】:

  • 这只是外部 for 循环中的错字,因此投票将其关闭为“简单错字”。

标签: c string for-loop comparison-operators


【解决方案1】:

你应该把外循环改成:

for (int k=0; k<length; k++)

你搞错了:

for (int k=0; k>length; k++)

【讨论】:

    【解决方案2】:

    试试这个.. 而不是

    for (int k=0; k>length; k++) 
    

    应该是

    for (int k=0; k<length; k++) 
    

    【讨论】:

      【解决方案3】:
      for (int k=0; k>length; k++) 
      

      这种类型的代码会给你一个

      1. 无限循环

      1. 非命中条件。

      这里,这是第 2 点。考虑到length 的值 >= 0,for 循环中的条件检查将变为失败,因此它不会执行循环体。

      对于第一种情况,如果你初始化k 的值大于length 的值,你将面临无限循环,因为k&gt;length 将永远不会变为假。

      您应该将您的条件检查更改为for (int k=0; k &lt; length; k++)

      此外,您应该将 templen = strlen(temp); 移到内部 for 循环之外,或者,您可以省略该语句本身并在内部 for 循环之前将 templen 初始化为零。您的代码中已经有 templen++;

      【讨论】:

      • 谢谢!问题是我在切换时遇到了段错误错误 - 这就是为什么我一开始就对布尔表达式感到困惑。你知道我为什么会收到这个错误吗?
      • @DonglimPark 你能提供更多信息吗?哪一行?
      • @DonglimPark length 的值是多少?如果小于22,则copy[i]; 越界访问。
      • 没关系!当我将 Templen 语句移到循环之外时,它解决了这个问题。非常感谢!
      【解决方案4】:

      如果for 循环,您可能弄错了条件语句。您已将条件指定为k&gt;length。 由于条件始终为假,因此循环不会迭代。将其更改为for (int k=0; k&lt;length; k++);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-17
        • 1970-01-01
        • 2021-08-18
        • 2012-01-05
        • 2021-04-27
        • 2022-01-23
        相关资源
        最近更新 更多