练习1-10 编写一个将输入复制到输出的程序,并将起重的制表符替换为\t,把回退符替换成\b,把反斜杠替换为\\。这样可以将制表符和回退符以可见的方式显示出来。
代码如下:
#include <stdio.h> // 包含标准库的信息。 #include <conio.h> int main( void ) // 定义名为main的函数,它不接受参数值。 { printf("======将输入的字符中的制表符替换为\t,退回符替换成\b,反斜杠替换为\\======\n"); //int c; // getchar()是有缓存的,所以\b都直接起了作用,所以程序并不能显示‘\b‘。 /*while ((c = getchar()) != EOF) { // 这里通过if-else判断字符并替换。 if (c == ‘\t‘) printf("\\t"); else if (c == ‘\b‘) printf("\\b"); else if (c == 8) printf("\\b"); else if (c == ‘\\‘) printf("\\\\"); else putchar(c); }*/ // 这个示例当用户输入回车事终止输入,可以做到输入后立即替换字符,并没有做到将输入复制到输出的程序。 /*while ((c = getch()) != 13){ if (c == ‘\t‘) printf("\\t"); else if (c == ‘\b‘) printf("\\b"); else if (c == ‘\\‘) printf("\\\\"); else putchar(c); }*/ //getch(); // 防止控制台一闪而过,需要接受任意字符后在关闭控制台。 //return 0; // 向执行环境返回一个整形,0代表执行成功。 // 这个题目涉及到对虚拟终端的控制,程序需要用到特定的api来拿到Backspace。 // 引用:http://www.zhihu.com/question/21658256/answer/18986712 /*int ch; do { ch = _getch(); printf("%c\n", ch); } while (1);*/ // return 0; // 以上这段代码关键为 _getch() 函数。参考_getch, _getwch }
个人理解:
这道题目中的回退符未能按照题目要求实现,待处理。
使用getchar()函数时,键入回退符立即对缓冲区生效,最终并未获得到回退符。
使用getch()时,会得到回退符,但并没有完成练习题所说的将输入复制到输出。
时间: 2024-10-06 05:41:08