l0v3y0u 发表于 2014-3-15 23:35:34

各位进来看一下这个程序,语法没错,但结果。。。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_COLS 20 /*定义 所能处理的最大列号*/
#define MAX_INPUT 1000 /*每个输入的最大长度*/

int read_column_numbers(int colunms[],int max); /*-*/
void rearrange(char *output, char const *input, int n_columns, int const columns[]);

int main(void){
int n_columns;
int columns; /*输入行的数组*/
char input; /*输出行的数组*/
char output;
/*下面是读取字符串的标号*/
n_columns = read_column_numbers(columns,MAX_COLS);
/*读取打印剩余的行内容*/

while (gets(input)!=NULL){
printf("原始的输入的内容是: %s\n",input);
rearrange(output, input, n_columns,columns);
printf("之后的结果是:%s\n",output);
}

return EXIT_SUCCESS;

}

/*现在读取列标号 如果有超出范围的不予理会*/
int read_column_numbers(int columns[],int max)
{
int num = 0;
int ch;
/*读取列标号 如果读取的数字小于0则停止*/
while (num < max &&scanf("%d",&columns)==1&&columns>=0)
num+=1;
/*现在来确定标号的个数是不是偶数个*/
if (num%2 !=0){
puts("输入的行号不是偶数个 所以不能配对 系统退出");
exit(EXIT_FAILURE);

}
/*现在丢弃该行中包含最后*/
while ((ch=getchar())!=EOF&&ch!='\n')
;
return num;

}

/*现在开始处理行的内容,将指定的字符连接在一起,输出行的内容是以NUL做结尾*/
void rearrange(char *output, char const *input, int n_columns, int const columns[])
{
int col;
int output_col;/*输入列的计算器*/
int len; /*输出行的长度*/
len = strlen(input);
output_col = 0;
/*处理每对的列标号*/
for (col = 0;col<n_columns;col +=2){
int nchars = columns-columns+1; /*-*/
if(columns>=len||output_col==MAX_INPUT-1)
break;
/*如果输出的空间不够则使用可以容纳的内容*/
if(output_col+nchars>MAX_INPUT-1)
nchars = MAX_INPUT- output_col-1;
strncpy(output+output_col,input+columns,nchars);
output_col +=nchars;

}
output = '\0';
}






各位编译看看。。
页: [1]
查看完整版本: 各位进来看一下这个程序,语法没错,但结果。。。