the c programing language 1-22 较长输入行折成短些的多行,非缓冲方式实现
2015-01-30 19:32
211 查看
/* * K&R2 1-22 * Author: Donmmi * 程序说明: 代码核心部分:折行后的当前行长度为未输出的空白字符数(len = nspace),再根据折行位置进行处理 */ #include <stdio.h> #define NLINE 4 #define NTAB 2 int main(void) { int i, c; int len, nspace; len = nspace = 0; while ((c = getchar()) != EOF) { /* 非空格和非换行符 */ if (c != ' ' && c != '\t') { ++len; while (nspace) { /* 遇到非空白字符,首先输出空白符,空格数目保存在nspace中 */ putchar(' '); --nspace; } putchar(c); if (len == NLINE) { if (c != '\n') /* 如果在需要折行的位置字符为换行符,则不输出换行符 */ putchar('\n'); len = 0; } if (c == '\n') len = 0; } else { /* 空格或tab */ if (c == ' ') { ++len; ++nspace; } else if (c == '\t') { len += NTAB; nspace += NTAB; } /* 由于tab的原因,len可能会大于NLINE,处理多余的空白行输出 */ if (len >= NLINE) { /* 需要折行 */ if (len > nspace) /* 如果len>nspace先输出一个换行符 */ putchar('\n'); if (nspace / NLINE > 0) for (i = 1; i <= nspace / NLINE * NLINE; ++i) { /* 输出一整行空格 */ putchar(' '); if (i % NLINE == 0) putchar('\n'); } nspace -= nspace / NLINE * NLINE; /* 减去输出的空白符 */ len = nspace; } } } return 0; }
相关文章推荐
- JSP用中收集数据:javascript 实现输入多行动态输入
- 输入汉字自动转为拼音(jsp实现方式)
- 基于xml配置方式实现对action中指定方法进行输入校验
- 带分割符号列值记录拆分成多行的实现方式
- 输入校验--基于XML配置方式实现
- JSP用中收集数据:javascript 实现输入多行动态输入
- 基于XML配置方式实现输入校验
- 对Ext.form.TriggerField实现下拉菜单和手动两种方式输入数据
- 基于XML配置方式实现输入校验
- object-c 利用scanf 实现终端的输入输出缓冲
- C与C++中标准输入实现方式上的一点区别
- 第九周实验报告任务 1 定义Time类中的<<和>>运算符重载,实现时间的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
- 重新夯实基础,the c programingn language 再读笔记之类型、运算符与表达式
- 基于xml配置方式实现对action中指定方法进行输入校验
- 《第九周任务一》定义Complex类中的《《和》》运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然
- Gotchas in the C++ programing language
- 重新夯实基础,the c programingn language 再读笔记
- 重新夯实基础,the c programingn language 再读笔记之函数与程序结构
- 825 - Walking on the Safe Side------水题(注意输入方式)
- 基于XML配置方式实现对action的所有方法和指定方法进行输入校验