我正在做 K&R 书。 如果我选中 ==,则一切正常,但如果我选中 !=,则不会打印直方图。 这行得通
while( (c = getchar()) != EOF )
{
if(c == ' ' || c == '\t' || c =='\n')
{
state = OUT;
if(wc>0)
++numOfWords[wc];
wc = 0;
}
else
if(state == OUT)
state = IN;
if(state = IN)
++wc;
}
但将 if 部分更改为此不会:
if(c != ' ' || c != '\t' || c !='\n'){
if(state == OUT){
state = IN;
++wc;}
else
++wc;
}
else
{
state = OUT;
if(wc>0)
++numOfWords[wc];
wc = 0;
}
}
我想要不是制表符、空格或换行符的每个字符。所以我写了 c != '\t' || c!= ' ' || c!= '\n'.
我的意思是
如果 c 不是 (!=) space(' ') 那么它的 1(true) OR(||) 如果 c 不是 (!=) tab('\t') 那么它的 1 OR(||) ...等等。
如果 OR 语句中的任何一个为真,则整个语句为真,主体应该执行,那么它为什么不执行呢?
感谢您注意到第一个代码段中的拼写错误,我已更正它,但我想问的是为什么第二个代码段不起作用?
回答: 这非常有效:
if(c != ' ' && c != '\t' && c !='\n' && c != '"' && c!= '.' && c != ','){
if(state == OUT){
state = IN;
++wc;}
else
++wc;
}
else
{
state = OUT;
if(wc>0)
++numOfWords[wc];
wc = 0;
}
最佳答案
在第一个片段中
if(state = OUT)
...
if(state = IN)
错了。将此更改为
if(state == OUT)
...
if(state = IN)
之后,如果您的第一段代码运行良好,则进行更改
if(c != ' ' || c != '\t' || c !='\n')
在你的第二个片段中
if(c != ' ' && c != '\t' && c !='\n')
关于c - 来自 K&R 的练习 1-13,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19143083/