程序不打印数字

时间:2011-07-12 18:31:35

标签: c

我是C的初学者,我买了“The C programming language”这本书,开始阅读并完成它所说的一切。书中有一个代码,应该打印出句子的行数,单词和字符。这是本书的代码。

#include <stdio.h>
#define IN 1 /* inside a word */
#define OUT 0 /* outside a word */


/* count lines, words, and characters in input */
main()
{
 int c, nl, nw, nc, state;

 state = OUT;
 nl = nw = nc = 0;
 while ((c = getchar()) != EOF) {
      ++nc;
      if (c == '\n')
          ++nl; 
      if (c == ' ' || c == '\n' || c = '\t')
          state = OUT;
      else if (state == OUT) {
          state = IN;
          ++nw;
      }
 }
printf("%d %d %d\n", nl, nw, nc);
} 

由于某种原因,不显示应使用printf打印的值。我真的不知道出了什么问题。如果我将printf放在while循环中,它只打印出数字,但这不是正确的,因为它会在每次值改变时打印数字。

5 个答案:

答案 0 :(得分:3)

这一行中有一个拼写错误 - c = '\t'的赋值总是评估为真

if (c == ' ' || c == '\n' || c = '\t')

要修复,请将=更改为==

if (c == ' ' || c == '\n' || c == '\t')

回答你的问题为什么不打印任何东西 - 我认为编译器要么发出错误或警告导致程序没有链接,因此你实际上并没有编译列出的源代码,而是运行以前编译的任何代码的旧版本。

答案 1 :(得分:1)

gcc在这一行给出了编译错误:

if (c == ' ' || c == '\n' || c = '\t')

看@那一行,很容易发现拼写错误:c = '\t')

错过了平等测试,不是吗? :)

答案 2 :(得分:1)

看起来您正在从STDIN(键盘)读取输入,并且仅在“文件结束”上保留循环,这不会发生。正如其他答案所暗示的那样。

答案 3 :(得分:0)

除了其他人提到的拼写错误外,您还需要发送End-Of-File信号来结束输入循环。这取决于您运行它的环境 - 在Windows中是Ctrl + Z,在* NIX环境中应该是Ctrl + D.我需要在新行上输入它,然后在使用我常用的IDE(Code :: Blocks)时按Enter键。

What it looks like

还要记住,在编写K&amp; R(1&amp; 2)时,命令行编程是常态,并且如果刚刚结束程序,通常会期望输出可见。某些IDE会在程序结束时关闭其终端仿真程序,然后才能查看结果,因此您可能需要添加类似

的内容
printf("\nPress return to continue");
getchar();

在程序结束时。或者,自己从OS终端模拟器运行它(在Windows上使用cmd.exe,或者使用gnome-terminal,yakuake或任何操作系统提供的)。导航到该文件夹​​和

your_executable.exe

./your_executable

答案 4 :(得分:0)

if (c == ' ' || c == '\n' || c = '\t')中所述,这是一个平等问题。 我建议你使用像Eclipse CDT这样的好IDE,它会警告你这些错误。