getchar()的疑问
今晚打老虎 2009-03-10 10:47:14 这是C和指针第一章举的那个例子。其中的一部分我看不明白。大家帮我分析下
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define MAX_COLS 20
#define MAX_INPUT 1000
int
read_column_numbers(int columns[],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("Original input : %s\n",input);
rearrange(output,input,n_columns,columns);
printf("Rearrange line %s\n",output);
}
return EXIT_SUCCESS;
system("PAUSE");
return 0;
}
int
read_column_numbers(int columns[],int max){
int num=0;
int ch;
while(num<max&&scanf("%d",&columns[num])==1&&columns[num]>=0)
num+=1;
if(num%2!=0){
puts("Last column number is not paired.");
exit(EXIT_FAILURE);
}
while((ch=getchar())!=EOF&&ch!='\n')//这里getchar到底是要干什么呢?书上说是丢掉该行中包含最后一个数字的那部分内容。如果我的输入是4 9 12 20 -1,是不是-1要被丢弃?可是我检查变量,-1被存储到columns[4]里了。那这个语句又有什么用?
;
return num;
}
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';
}