我发现这个程序是K& R C编程书我是C编程的新手 我不明白为什么使用变量d而d的值变为d = 0 程序之间d = 1.
任何人都可以解释一下这个程序逻辑是什么我知道这个程序要替换 与\ t同样的标签。
#include <stdio.h>
int main()
{
int c, d;
while ( (c=getchar()) != EOF) {
d = 0;
if (c == '\\') {
putchar('\\');
putchar('\\');
d = 1;
}
if (c == '\t') {
putchar('\\');
putchar('t');
d = 1;
}
if (c == '\b') {
putchar('\\');
putchar('b');
d = 1;
}
if (d == 0)
putchar(c);
}
return 0;
}
答案 0 :(得分:4)
d
用作标志变量(即传递单个二进制条件的变量,是或否)。当程序将字符d
解释为特殊字符时,程序将c
设置为1,并打印其斜杠前缀值。程序稍后会检查d
标志以确定它是否已打印c
。如果答案为否,则程序打印c
;否则,它会继续循环的下一次迭代。
答案 1 :(得分:1)
嗯...让我们一步一步
if
s“工作”if
“工作”\
和t
if
“工作”\
和\
答案 2 :(得分:0)
'd'的值用于确定是否已经输出,所以这一行:
if (d == 0)
putchar(c);
当输入不是上述之一时执行。 ('\\','\ t','\ b')
答案 3 :(得分:0)
它正在读取用户的输入,&gt;一次一个字符。并检查escape chars
。
因为转义字符实际上包含2个字符,所以如果条件转义字符被打印(2个putchars),这是由用户输入的。
d
用作告诉用户是否输入了转义字符的标志。
d == 1 =&gt;用户输入了转义字符,它已经打印出来了。不要再打印
d == 0 =&gt;用户输入普通字符,现在应该打印出来。
注意:其他转义字符也存在,但未在上述程序中处理。
答案 4 :(得分:0)
这实际上是一个写得很差的程序。更好的版本可能写成:
#include <stdio.h>
int main()
{
int c;
while ( (c=getchar()) != EOF) {
switch (c) {
case '\\':
putchar('\\');
putchar('\\');
break;
case '\t':
putchar('\\');
putchar('t');
break;
case '\b':
putchar('\\');
putchar('b');
break;
default:
putchar(c);
}
}
return 0;
}
此处,不需要额外变量d
来跟踪程序是否已回显输入字符。我认为,理解重写版本的功能要容易得多。我很惊讶“C程序设计语言”会有这么糟糕的程序。
答案 5 :(得分:0)
简单。
while ( (c=getchar()) != EOF) {
虽然C不是文件的结尾(EOF是结尾文本文件的最后一个字符的代码),即在此文本文件中有要读取的字符时。 检查c(此字符)是否等于'\'或\ t(水平制表)或\ b(退格)。如果匹配,只需根据我的规则打印并将d设置为1.
对于所有其他角色,只需按原样打印。
if (d == 0)
putchar(c);
我怎么知道它是否有规律性? d = 0.当循环再次开始时,它将d设置为0,如果找到3个特殊字符中的一个,则再次将d设置为1,以防止它再次在最后一部分打印。