高手请进,一个简单但很恼人的问题。
今天晚上一学生问我一道C语言的问题
问题是这样:编写一个将输入复制到输出的程序,并将其中的回退符替换为\b,把制表符替换为\t,把反斜杠替换为\\,这样可以把制表符和回退符以可见的方式显示出。
这个是个很简单的问题,我写了两种方法,完成的功能一样:
方法一:
#include <stdio.h>
main()
{
int c;
while((c=getchar())!=EOF)
{
if(c==8)
printf( "\\b ");
if(c== '\t ')
printf( "\\t ");
if(c== '\\ ')
printf( "\\\\ ");
if(c!= '\b ')
if(c!= '\t ')
if(c!= '\\ ')
putchar(c);
}
}
方法二:
#include "stdio.h "
main()
{
int c;
while((c=getchar())!=EOF)
if(c== '\b ')
{
putchar( '\\ ');putchar( 'b ');
}
else if(c== '\t ')
{
putchar( '\\ ');putchar( 't ');
}
else if(c== '\\ ')
{
putchar( '\\ ');putchar( '\\ ');
}
else putchar(c);
}
但现在有一个问题是:程序执行的时候,回退符(又叫退格符)怎么从键盘上输到控制台里,我们知道回退符的ASCII码是0x08(相当于十进制的8),键盘可以用CTRL+H来表示,但我尝试了各种办法都不能把\b打印出来,制表符和反斜杠都可以从键盘输入并正确打印出来,但回退符就是打印不出来,问题的关键就是:怎么从键盘输入一个回退符进入计算机中?或者说怎么在程序执行的时候输一个回退符到控制台?
我似乎觉得现在的计算机键盘做不到,因为我也一直没碰到这方面的问题,所以今晚上郁闷起,我是尝试了各种方法才写的这个帖子。
[解决办法]
好像是说c++不支持回显,所以这个需求可能达不到
[解决办法]
\b 不能 撤销 回车。
所以,
即使输入了 \b ,
回车后也无法看到 \b 产生的效果 ~
[解决办法]
#include <stdio.h>
#include <stdlib.h>
int main()
{
int c;
while(scanf( "%d ", &c) == 1) //输入 ascii 码 , \b 输入 8
{
//printf( "123456 ");
//putchar(c);
if(c == '\b '){printf( "\nYou input charactor: \\b\n ");}
if(c == '\t '){printf( "\nYou input charactor: \\t\n ");}
}
system( "pause ");
return 0;
}
[解决办法]
退格符号在键盘上对应的是 Back Space,
但是它无法作为字符输入给程序 ~
[解决办法]
while(scanf( "%d ", &c) == 1) //输入 ascii 码 , \b 输入 8
输入 8:
执行 if(c == '\b '){printf( "\nYou input charactor: \\b\n ");}
注意这里的输入方式不是按照字符方式,
而是按照数值编码的方式 ~~
[解决办法]
\t 对应的 ascii 码值
[解决办法]
\t == 9
输入 数字 9 即可。
结束循环输入 ctrl+Z 回车
[解决办法]
要用到console 的IO输入输出
getch
getchar是标准流的IO函数