我在写K&R的书。
如果我检查a==那么一切都正常,但如果我检查!=,则不打印直方图。
这行得通

  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部分改为this不会:
    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'.
如果OR语句中的任何一个是真的,那么整个语句都是真的,body应该执行,那么为什么它不执行呢?
感谢您注意到第一个片段中的错别字,我更正了它,但我想问的是,为什么第二个片段不起作用?
回答:
这非常有效:
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 - 练习1-13来自K&R,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19143083/

10-10 23:19