2013-11-20 51 views
-1

我有这个简单的程序,我想测试自己,它基本上从终端字符读取并计算输入了多少个小写字符。C被困在无限循环中

在我调用的函数中,它看起来只是在循环中永远运行。

/* 
Create a function that reads the number of lower case letters from the user 
*/ 

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 

void CopyMe(char []); 

main() 
{ 
    char letters [100]; 
    int i = 0; 
    do 
    { 
     letters [i++] = getchar(); 
    } 
    while (letters [i-1] != '\n'); 
    letters [i-1] = '\0'; 

    CopyMe(letters); 

    printf("Done \n"); 
    system("pause"); 
    return 0; 
} 

void CopyMe(char a[]) 
{ 
    int lowercase = 0; 
    int i=0; 
    while (a[i] != '\0') 
    { 
     if (a[i] >= 'a' && a[i] <= 'z') 
     { 
      lowercase++; 
     } 
    } 
    printf("Lowercase: %d \n", lowercase); 
} 
+1

使用调试器分步循环。原因应该很快变得清晰。 –

+1

你不能用'for(i = 0; i ugoren

+0

无论何时,一个循环似乎“永远运行”,你可能会很好地检查循环的条件,并确定循环体内的任何东西是否会改变它。 – WhozCraig

回答

2

你永远不增加iCopyMe功能,所以while循环永远不会终止,总是a[0]工作。

2

你忘了我递增变量...

+0

在CopyMe中...只用于循环ffs –

1

您还没有CopyMe递增i

void CopyMe(char a[]) 
{ 
    int lowercase = 0; 
    int i=0; 
    while (a[i] != '\0') 
    { 
     if (a[i] >= 'a' && a[i] <= 'z') 
     { 
      lowercase++; 
     } 
     i++; // <------- Don't forget about meeeeeee!!! 
    } 
    printf("Lowercase: %d \n", lowercase); 
}