C 为什么我的if语句在不应该激活的情况下激活?
我已经为这个C程序代码工作了一段时间了,我已经很接近了,但是有一个小问题我不能解决,因为上帝的爱 我的程序做什么 它统计字数、字符数和行数 示例输入如下: b b 输出应该是 4,2,2 请注意,我输入b,然后按enter键,然后再次输入b,然后按enter键并按ctrl-d,此时会出现打印语句 我的问题是: 我越来越 4,3,2 我知道问题是什么,这是因为我的if语句正在激活,但当我在头脑中运行这个程序时,我根本不明白为什么它应该激活 我的代码99%完成,我希望C 为什么我的if语句在不应该激活的情况下激活?,c,C,我已经为这个C程序代码工作了一段时间了,我已经很接近了,但是有一个小问题我不能解决,因为上帝的爱 我的程序做什么 它统计字数、字符数和行数 示例输入如下: b b 输出应该是 4,2,2 请注意,我输入b,然后按enter键,然后再次输入b,然后按enter键并按ctrl-d,此时会出现打印语句 我的问题是: 我越来越 4,3,2 我知道问题是什么,这是因为我的if语句正在激活,但当我在头脑中运行这个程序时,我根本不明白为什么它应该激活 我的代码99%完成,我希望 #include <st
#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 );
}
我确信我当时只激活c的if语句不是newlineenter,或者如果它是一个空格…为什么它在运行。。困惑的有人能帮我解决这个小问题吗
编辑:
非常感谢sharth,这对我来说真是一个糟糕的错误。OR和语句是不同的,一旦你看到这两个的真值表,你就会明白为什么。。我希望这个问题能帮助其他和我有相同问题的人,比如OR和….让我们看看你的条件:
if (c != ' ' || c != '\n') //** This should only run if we get NO letter
让我们看三个案例:
如果c='',那么我们有假| |真,这是真的
如果c='\n',那么我们有true | | false,这是true
如果c='a',那么我们有true | | true,这是true。
你实际上想要:
if (c != ' ' && c != '\n')
这意味着,当c既不是空格也不是换行符时,我们将执行条件语句。使用所有警告和调试信息gcc-Wall-g编译。然后使用调试器gdb;你可以一步一步地运行你的程序,查询变量的值。但是从我自己的想法来看,输入字母b和输入应该会有一个新行。然后,如果我再次输入b并按enter键,这是另一个换行符。if语句怎么会激活>>?@Ray,因为它永远都是真的!看sharth的回答是的你是对的。。。。我不能相信这个简单愚蠢的错误。。我完全把OR语句和AND语句搞混了,然后我才记住了这两个表。。。。非常感谢sharth.char c;应为int c;。EOF可能不是字符。真的需要这样一个规范的答案。这至少是我今天看到的第三个问题,答案在哪里,尽管它们使用的是不同的语言PHP、JS和现在的C。如果我们使用&&语句,这意味着两者都必须是正确的?@Ray:老实说,我没有花太多时间看这个问题。但是代码中的条件总是正确的。这很可能是错的。哦,我的上帝-|-…我真不敢相信我没有意识到,如果一个是真的,另一个是假的,| |可以激活。。这感觉就像是回到MACM 101的旅程谢谢。。我必须再次回顾我的逻辑。刚刚想起OR及其真值表。嗯,是的,当两者都为1时,它应该是&&语句。1它是否激活。