我是初学者,只是学习C;所以,请耐心等待我。
我正在尝试编写一个非常简单的程序,该程序通过一个字符串,计算每个单词中的字符,然后用它们的字符数替换这些单词。我的问题是我陷入无限循环,无法弄清楚原因!这是代码:
#define NEWLINE '\n'
#define SPACE ' '
int main(int argc, char *argv[]) {
int character;
int count = 0;
printf("\nType in a sentence of any lenght, then hit ENTER!\n");
character = getchar();
while (character != NEWLINE) {
while ((character != SPACE) || (character != NEWLINE)) {
count++;
character = getchar();
}
printf("%d ", count);
count = 0;
if (character != NEWLINE) {
character = getchar();
}
}
printf("\n");
system("PAUSE");
return 0;
}
感谢所有帮助过我的人!我想我会再回过头来研究一下逻辑运算符。
答案 0 :(得分:15)
while ((character != SPACE) || (character != NEWLINE)) {
count++;
character = getchar();
}
这将无限循环,因为反向:
(character == SPACE) && (character == NEWLINE)
总是假的。
我怀疑你的意思
while ((character != SPACE) && (character != NEWLINE)) {
count++;
character = getchar();
}
答案 1 :(得分:4)
你总是有一个真实的条件:
(character != SPACE) || (character != NEWLINE)
例如:
character = ' ': false or true => true
character = '\n': true or false => true
您应将其更改为:
(character != SPACE) && (character != NEWLINE)
这应该可以解决你的无限循环。
答案 2 :(得分:2)
将||
替换为&&
答案 3 :(得分:2)
character!= SPACE)|| (字符!= NEWLINE总是如此。将其更改为字符!= SPACE)&& (性格!= NEWLINE。
答案 4 :(得分:1)
替换|| (或)与&& (AND)因为while循环将始终为true,因此它永远不会脱离循环。如果你更换它应该可以工作。