C程序设计语言练习题1-10

练习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

C程序设计语言练习题1-10的相关文章

C程序设计语言练习题1-23

练习1-23 编写一个删除C语言程序中所有的注释语句.要正确处理带引号的字符串与字符常量.在C语言中,注释不能嵌套. 代码如下: #include <stdio.h> // 包含标准库的信息. #define MAXLINE 1000 // 每行最大字符数为1000个. #define BR 10 // 十个字符换一行. int getline(char line[], int maxline); int main() // 定义名为main的函数,它不接受参数值. { int len; in

C程序设计语言练习题1-18

练习1-18 编写一个程序,删除每个输入行末尾的空格及制表符,并删除完全是空格的行. 代码如下: #include <stdio.h> // 包含标准库的信息. #define MAXLINE 10 // 每行最大字符数为1000个. int getline(char line[], int maxline); int main() // 定义名为main的函数,它不接受参数值. { int len; int i; char line[MAXLINE]; while ((len = getli

C程序设计语言练习题1-22

练习1-22 编写一个程序,把较长的输入行”折“成短一些的两行或多行,折行的位置在输入行的第n列之前的最后一个非空格之后.要保证程序能够智能地处理输入行很长以及在制定的列前没有空格或制表符时的情况. 代码如下: #include <stdio.h> // 包含标准库的信息. #define MAXLINE 1000 // 每行最大字符数为1000个. #define BR 10 // 十个字符换一行. int getline(char line[], int maxline); int mai

C程序设计语言练习题1-19

练习1-19 编写函数reverse(s),将字符串s中的字符顺序颠倒过来.使用该函数编写一个程序,每次颠倒一个输入行中的字符顺序.代码如下: #include <stdio.h> // 包含标准库的信息. #define MAXLINE 10 // 每行最大字符数为1000个. int getline(char line[], int maxline); void reverse(char line[], int len); int main() // 定义名为main的函数,它不接受参数值

C程序设计语言练习题1-17

练习1-17 编写一个程序,打印长度大于80个字符的所有输入行. 代码如下: #include <stdio.h> // 包含标准库的信息. #define MAXROW 10 // 最大行数为10行. #define MAXLINE 100 // 每行最大字符数为100个. int getLength(char cs[]); int main() // 定义名为main的函数,它不接受参数值. { int c, i, row; char cs[MAXROW][MAXLINE]; // 初始化

C程序设计语言练习题1-16

练习1-16 修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本. 代码如下: #include <stdio.h> // 包含标准库的信息. #define MAXLINE 10 int getline(char line[], int maxline); int main() // 定义名为main的函数,它不接受参数值. { int len; int max; char line[MAXLINE]; while ((max = getlin

C程序设计语言练习题1-13

练习1-13 编写一个程序,打印输入中单词长度的直方图.水平方向的直方图比较容易绘制,垂直方向的直方图则要困难些. 代码如下: #include <stdio.h> // 包含标准库的信息. #define MAXWORD 10 // 输入单词的最大数. #define IN 1 // 在单词内. #define OUT 0 // 在单词外. int main() // 定义名为main的函数,它不接受参数值. { printf("======打印输入单词长度的直方图======\n

C程序设计语言练习题1-9

练习1-9 编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替. 代码如下: #include <stdio.h> // 包含标准库的信息. int main() // 定义名为main的函数,它不接受参数值. { printf("======将输入的多个空格用一个空格代替======\n"); int c, space; while ((c = getchar()) != EOF) { if (c != ' ') putchar(c); // 若输入的字

C程序设计语言练习题1-7

练习1-7 编写一个打印EOF的值的程序. #include <stdio.h> // 包含标准库的信息. int main() // 定义名为main的函数,它不接受参数值. { // 输出EOF. printf("EOF对应的整形数是%d.\n",EOF); getch(); // 防止控制台一闪而过,需要接受任意字符后在关闭控制台. return 0; // 向执行环境返回一个整形,0代表执行成功. } 个人理解: 通过程序打印,可以看到EOF对应的整形数为-1.