我是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循环中,它只打印出数字,但这不是正确的,因为它会在每次值改变时打印数字。
答案 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键。
还要记住,在编写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,它会警告你这些错误。