我一直在研究这个C程序代码已经有一段时间了,我只是太近了,但是这只是一个小问题,我无法为上帝之爱解决..
我的计划做了什么?
它计算单词,字符和行的数量。
示例输入为:
B'/ P>
B'/ P>
输出
4,2,2
请注意,我输入b然后按回车键然后再次输入b,之后按Enter键并按ctrl-d并出现打印语句。
我的问题:
我到了 4,3,2
我知道问题是什么,因为我的if语句正在激活,但当我在脑子里运行这个程序时,我不明白为什么它应该激活...
我的代码(我希望完成99%)
#include <stdio.h>
#include <string.h>
int main()
{
int traversal = 1;
unsigned long int charcount = 0;
unsigned long int wordcount = 0;
unsigned long int linecount = 0;
int counter = 0;
char c;
while ((c = getchar()) != EOF)
{
charcount = charcount +1;
if((c <= 'z' && c >= 'a') || (c <= 'Z' && c >= 'A') || c == '\'')
{
if (counter >= 1)
{
wordcount++;
counter = 0;
printf("counter\n");
}
}
else
{
if (c != ' ' || c != '\n') //** This should only run if we get NO letter
{
counter++;
}
}
if (c == '\n')
{
linecount = linecount+1;
wordcount = wordcount+1;
traversal = traversal +1;
printf("%lu\n", wordcount);
}
if(c == ' ')
{
wordcount = wordcount+1;
}
}
printf( "%lu %lu %lu\n", charcount, wordcount, linecount );
}
我确信我所做的if语句只激活了那时的c不是换行符(输入)或者它是一个空格...为什么它正在运行..困惑。有人可以帮我解决这个小问题吗?
编辑:
非常感谢sharth,这对我来说真的是一个很糟糕的错误.OR和AND语句是不同的,一旦你看到这两个的真值表你就会明白为什么..我希望这个问题有助于其他人与OR和AND有同样的问题....
答案 0 :(得分:4)
让我们看看你的条件:
if (c != ' ' || c != '\n') //** This should only run if we get NO letter
让我们看看三种情况:
c == ' '
,则我们(false || true)
<{1}} true
,则我们c == '\n'
<{1}} (true || false)
,则我们true
为c == 'a'
。你真的想要:
(true || true)
这意味着当true
既不是空格也不是换行符时,我们将执行条件语句。