为什么我的for循环只迭代一次?

时间:2014-05-01 20:28:21

标签: c for-loop iteration

我正在写一个Hangman程序。我的功能有问题,处理来自用户的字符猜测。我遇到的问题是我的for循环似乎只是迭代一次,我无法解决原因。这是一项任务,所以我并没有要求回复具体的代码,但正确方向上的一点是好的。谢谢,这里的功能是:

void charGuess(char *ch,char *word, int aCount)
{
    char *chr;
    int theResult, i, k, lossCount = 0;
    char aArray[aCount+1];
    char *current;

    for(k=0;k<aCount;k++)
    {
        aArray[k] = '_';
    }

    printf("\nThe char count: %d\n", aCount); //the "aCount" which ive passed in works

    while(1){
        for(i=0; i<aCount; i++) //this loop only iterates once. "aCount" is never 0 when i pass it.
        {
            current = word[i];
            printf("the current char is %c", current);

            if(strcmp(current, ch))
            {
                printf("\ni is: %d\n", i);
                aArray[i] = current;
                printf("%c", aArray[i]);
                displayNewDashes(aCount, aArray);
                break;
            }
            else
            {
                lossCount++;
                hangTheMan(lossCount);
                printf("Loss count: %d", lossCount);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:3)

由于您声明这是一个赋值,而您正在寻找指针,这里有一些基本的调试步骤。

1)打开编译器能够生成的所有警告,并修复代码,直到警告消失为止。现在上面的收益率(用gcc):

hang.c:20:21: warning: incompatible integer to pointer conversion assigning to
      'char *' from 'char'; take the address with & [-Wint-conversion]
            current = word[i];
                    ^ ~~~~~~~
                      &
hang.c:21:46: warning: format specifies type 'int' but the argument has type
      'char *' [-Wformat]
            printf("the current char is %c", current);
                                        ~~   ^~~~~~~
                                        %s
hang.c:26:27: warning: incompatible pointer to integer conversion assigning to
      'char' from 'char *'; dereference with * [-Wint-conversion]
                aArray[i] = current;
                          ^ ~~~~~~~

2)使用调试器逐步执行代码。如果您的编译器没有调试器,请获取新的编译器。严重。

3)如果仍然无法弄清楚为什么循环没有表现,请生成仍然具有意外行为的最小示例。很可能,做一个小例子就会暴露出这个问题。

4)如果仍然无法看到它,请在您的问题中记录以上所有内容 - 我们很乐意为您提供完成所需的提示。