【发布时间】:2013-11-20 15:28:06
【问题描述】:
我有一个简单的程序,我想自己测试它,它基本上从终端字符中读取并计算输入了多少小写字符。
在我调用的函数中,它似乎只是在循环中永远运行。
/*
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);
}
【问题讨论】:
-
使用调试器单步执行循环。原因应该很快就会清楚。
-
for (i=0; i<MAX; i++) { .. }不会出错。 -
任何时候循环似乎“永远运行”,您最好检查循环的条件并确定循环体内是否有任何东西会改变它。
-
我的猜测在这里:
while (letters [i-1] != '\n'); -
while我有时会使用while循环,我的同事(还有我自己,for)发现for循环更易于阅读、维护、理解和,作为一个构造,一个更好的工具for避免愚蠢的错误......使用for(i=0;a[i] != '\0';++i),或者,如果你坚持,为什么不增加指针a++?