为什么我的if语句不应该被激活?
问题描述:
我一直在研究这个C程序代码一段时间了,我只是很接近,但这只是一个小问题,我无法解决上帝的爱..为什么我的if语句不应该被激活?
我的程序是做什么的?
它计算单词,字符和行的数量。
示例输入是这样的:
b
b
输出应
4,2,2
注意,我进入B,然后按enter键,然后再次输入b,然后按Enter和pr ess 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);
}
我敢肯定,如果该stateme nt我在那时只激活c不是换行符(输入),或者它是空格...为什么它运行..困惑。有人可以帮我解决这个小问题吗?
编辑:
非常感谢沙尔斯,这是真正对我part..OR和和陈述都不同,一旦你看到真相表,这两个你会看到为什么..我一个贫穷的错误希望这个问题可以帮助谁具有相同的问题,因为我与OR和等人....
答
让我们来看看刚刚您的条件:
if (c != ' ' || c != '\n') //** This should only run if we get NO letter
让我们来看看三种情况:
- 如果
c == ' '
,那么我们有(false || true)
这是true
- 如果
c == '\n'
,那么我们有(true || false)
这是true
- 如果
c == 'a'
,那么我们有(true || true)
这是true
。
你真的想:
if (c != ' ' && c != '\n')
这意味着我们将执行条件语句时c
既不是空格,也不是换行符。
使用所有警告和调试信息('gcc -Wall -g')进行编译。然后**使用调试器**('gdb');您将能够一步一步地运行程序并查询变量的值。 – 2014-10-11 05:54:13
但是从我自己的想法输入字母“b”并输入应该换行。然后,如果我再次输入b并按下输入键,则它是另一个换行符。 if语句如何激活>。>? – Ray 2014-10-11 05:56:55
@射线,因为它会**总是**是真实的!看到sharth的回答 – 2014-10-11 05:58:51