我是通过一本书编程和学习C的新手。
本书的作者通过给出以下示例来解释逻辑运算符(AND,NOT和OR),该示例计算除双引号或单引号和句点字符之外的字符数。
我无法理解除了引号和句号之外的字符数。我理解,使用AND运算符时,两个条件都应该为真。
#include <stdio.h>
#define PERIOD '.'
int main(void)
{
char ch;
int charcount = 0;
while ((ch = getchar()) != PERIOD)
{
if (ch != '"' && ch != '\'')
charcount++;
}
printf("There are %d non-quote characters.\n", charcount);
return 0;
}
答案 0 :(得分:3)
我将尝试向您解释代码的主要部分:
while ((ch = getchar()) != PERIOD)
{
在这里,它会检查文本中包含的每个字符,只要字符与PERIOD
不同,这是一个点,所以它只是检查句子中的所有字符。
if (ch != '"' && ch != '\'')
charcount++;
}
如果条件为真,则在charcount
加1。要让if
返回true,ch != '"'
和ch != '\''
都必须为真! &&
运算符是logical AND,并且对于AND返回true(1),两个条件必须等于1.因此,如果字符等于“或”,则AND将返回0 ,所以我们不会在charcount
添加1。
答案 1 :(得分:2)
此条件if (ch != '"' && ch != '\'')
正在检查输入的字符是"
还是'
否则会增加字符数,否则不会。如果用户输入d
或#
,则会满足条件,因为#
的ASCII值不等于"
或'
,并且计数将获得递增。
答案 2 :(得分:2)
好吧,对于由getchar()
返回并存储在ch
中的每个字符(来自输入流,如键盘或文件),它将测试它是否不是双引号({{1} })如果它不是引用(ch != '"'
)
ch != '\''
是转义字符,表示\
是字符'\''
如果它们都不是,那么它会递增计数器('
)。
只要charcount++;
没有返回句点(getchar()
),就会继续这样做(如果确实如此,(ch = getchar()) != PERIOD
将不会被计算,因为代码将会执行意志循环立即)。
答案 3 :(得分:0)
您可以跳过使用继续:
#include<stdio.h>
#define PERIOD '.'
int main(void)
{
char ch;
int charcount = 0;
while ((ch = getchar()) != PERIOD)
{
if (ch != '"' && ch != '\''){
continue;
}
charcount++;
}
printf("There are %d non-quote characters.\n", charcount);
return 0;
}
输出:
./program Michi"""LoL'''Another'"LoL. There are 8 non-quote characters.