c语言backspace键的输入代表什么?
书上有道题说要编个程序把输入的东西输出,并且把输入的里面的backspace换成\b,但是backspace不是删掉前面的东西用的吗?这题目究竟怎么搞?...
书上有道题说要编个程序把输入的东西输出,并且把输入的里面的backspace换成\b,但是backspace不是删掉前面的东西用的吗?这题目究竟怎么搞?
展开
6个回答
展开全部
简言之,如果你使用 Linux, shell运行程序后键盘这样输入 Ctrl + h 可获得'\b'
C语言的发明者 Dennis Ritchie 写了一本叫做 The C Programming Language 的书,书里面有一道题(1-10)的一部分就是你的问题。
这道题的背景是,Linux 的 standard input 默认即键盘输入,standard output 默认即显示输出,之所以有 redirection 就是可以将这些标准输入输出转为文件输入输出。
这道题的原意是,比如我键盘按了 tab 键,显示器可能出来好几个空位,或者是文件中包含了 tab 键 redirection 到了显示器输出,光是从显示器肉眼是看不出来到底是多个空格还是一个 tab 键的。同理,ASCII 字符集或者是 Unicode 字符集,有很多这类 invisible 的不可见字符,包括 backspace 。如何将不可见字符转化为可见的或直观的表示,是这道题的原意。不可见字符那么多,都有数字编码对应,但转化为转义字符更为直观,这也是为什么只有少数的不可见字符拥有转义字符。
你可能遇到的困难是,直接输入了键盘上一个叫做 backspace 的键,显然几乎在任何程序里你直接造成了之前一个字符的删除。
幸运的是,在 shell 里,Ctrl-h 成了输入 backspace 字符的一个替代方案。
至于在其它系统其它程序如何输入,我想都有其方法的,Mac OS 有 bash,windows 的 cmd 或某些 IDE 是否可行我不知,我没有 Windows
我也是一个 C 语言的初学者,我学习 C 的目的是 Linux 业余编程,Unix/Linux 跟 C 是孪生兄弟,他们配合默契,希望对你们有用。
其实,更重要的,理解题目的主旨才是重要的
C语言的发明者 Dennis Ritchie 写了一本叫做 The C Programming Language 的书,书里面有一道题(1-10)的一部分就是你的问题。
这道题的背景是,Linux 的 standard input 默认即键盘输入,standard output 默认即显示输出,之所以有 redirection 就是可以将这些标准输入输出转为文件输入输出。
这道题的原意是,比如我键盘按了 tab 键,显示器可能出来好几个空位,或者是文件中包含了 tab 键 redirection 到了显示器输出,光是从显示器肉眼是看不出来到底是多个空格还是一个 tab 键的。同理,ASCII 字符集或者是 Unicode 字符集,有很多这类 invisible 的不可见字符,包括 backspace 。如何将不可见字符转化为可见的或直观的表示,是这道题的原意。不可见字符那么多,都有数字编码对应,但转化为转义字符更为直观,这也是为什么只有少数的不可见字符拥有转义字符。
你可能遇到的困难是,直接输入了键盘上一个叫做 backspace 的键,显然几乎在任何程序里你直接造成了之前一个字符的删除。
幸运的是,在 shell 里,Ctrl-h 成了输入 backspace 字符的一个替代方案。
至于在其它系统其它程序如何输入,我想都有其方法的,Mac OS 有 bash,windows 的 cmd 或某些 IDE 是否可行我不知,我没有 Windows
我也是一个 C 语言的初学者,我学习 C 的目的是 Linux 业余编程,Unix/Linux 跟 C 是孪生兄弟,他们配合默契,希望对你们有用。
其实,更重要的,理解题目的主旨才是重要的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
意思是遇到backspace字符串的时候用/b替换,注意因为/b是转义字符,所以当你printf的时候不会输出,例如printf("s/b")的时候,光标会向前移动一位,要在屏幕上输出/b,就要printf("//b")这样写
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
题目是说让你把输入的字符串中有backspace这一字符串的换成\b,例如,你输入的是sbackbackspacehi,只是让你输出sback\bhi而已,明白?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
backspace 光标左移1格。
如果有后继输出,就能覆盖掉一个字符,若无后继输出,不会用空白覆盖\b压着的字符。
例如:
char s1[10]="abcd\b";
char s2[10]="abcd\bD";
printf("s1: %s\n",s1); //输出 s1: abcd
printf("s2: %s\n",s2); //输出 s2: abcD
如果有后继输出,就能覆盖掉一个字符,若无后继输出,不会用空白覆盖\b压着的字符。
例如:
char s1[10]="abcd\b";
char s2[10]="abcd\bD";
printf("s1: %s\n",s1); //输出 s1: abcd
printf("s2: %s\n",s2); //输出 s2: abcD
追问
能把满足题目要求的代码顺便写出来吗?
追答
5小时以后再说,现在上班。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询