练习1-22 编写一个程序,把较长的输入行”折“成短一些的两行或多行,折行的位置在输入行的第n列之前的最后一个非空格之后。要保证程序能够智能地处理输入行很长以及在制定的列前没有空格或制表符时的情况。
代码如下:
#include <stdio.h> // 包含标准库的信息。 #define MAXLINE 1000 // 每行最大字符数为1000个。 #define BR 10 // 十个字符换一行。 int getline(char line[], int maxline); int main() // 定义名为main的函数,它不接受参数值。
{
int len; char line[MAXLINE]; while ((len = getline(line, MAXLINE)) > )
{
printf("%s\n", line);
} getchar(); // 防止控制台一闪而过,需要接受任意字符后在关闭控制台。
return ; // 向执行环境返回一个整形,0代表执行成功。
} int getline(char s[], int lim)
{
int c, i, j;
c = i = j = ;
while(i < lim - && (c = getchar()) != EOF && c != '\n')
{
if (c == '\n') {
s[i++] = c;
}
else if ((i - j) % BR + == BR) // 需要折行。
{
if (c != '\t' && c != ' ' && i != BR) // 如果需要换行的位置是空格或者制表符,则忽略这个字符。
{
s[i++] = c;
s[i++] = '\n';
j++;
}
}
else
s[i++] = c;
}
if (s[i - ] == '\n')
s[i - ] = '\0'; // 若上一个字符是换行符则不在执行换行。
else
s[i] = '\0';
return i;
}
个人理解:
主要练习了向字符数组的某一位置插入一个字符。