鱼C论坛

 找回密码
 立即注册
查看: 2016|回复: 0

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

[复制链接]
发表于 2014-3-15 23:35:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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[MAX_COLS]; /*输入行的数组*/
char input[MAX_INPUT]; /*输出行的数组*/
char output[MAX_INPUT];
/*下面是读取字符串的标号*/
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[num])==1&&columns[num]>=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[col+1]-columns[col]+1; /*-*/
if(columns[col]>=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[col],nchars);
output_col +=nchars;

}
output[output_col] = '\0';
}






各位编译看看。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 22:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表