《the c programming language》1-17 不明白自己编的程序错在哪

作者&投稿:宗政索 (若有异议请与网页底部的电邮联系)
#include<stdio.h>
#define MAXLINE 1000
/* 宏习惯用大写字母,且不能与下面的变量名相混 */

int getline(char line[],int maxline);

main()
{
int len;
char line[MAXLINE];

while((len=getline(line,MAXLINE))>0)
{
if(len > 80)
printf("%s",line);
}
}

int getline(char s[],int lim)
{
int i,c;
for (i=0; (c = getchar()) != EOF && c != '\n'; i++)
if(i < lim - 2)
s[i]=c;
/*
* 把if中的内容拿出来,因为不论上面是读到EOF跳出还是读到换行跳出,都要处理串尾
* if(c=='\n')
* {
* }
*/
s[i] = '\n'; /* 这句与下句可有可无,看程序需要而定 */
i++;
s[i] = '\0'; /* 行尾没有'\0'结束,必须加'\0' */
/*
* 不可能出现,删去
* if(c=='\0')
* s[i]='\0';
*/
return i;
}

#include<stdio.h>
#define maxline 1000

int getline(char * s,int lim);
/*
1数组其实是指针,用于定义而不用于声明
2提前声明用于c++或vc中,但要保证和被声明函数一样的格式参数,如果是turble c这行可以去掉
3maxline是个常量不能再当作变量使用
*/
void main() //如果是vc 需要加void, turble c不需要
{
int len;
char c;
char line[maxline];

while((len=getline(line,maxline))>0)
{
if(len>80)
printf("%s",line);
}
}

int getline(char * s,int lim)
{
int i,c;
for(i=0;(c=getchar())!=EOF&&c!='\n';i++)
if(i<lim-2)
s[i]=c;
if(c=='\n')
{
s[i]='\n';
i++;
}
if(c=='\0')
s[i]='\0';
return i;
}
//语法错误已改,我在vc编译通过,但没测试你的算法

是不是因为
int getline(char line[],int maxline);
maxline是常量
不能用作参数声明

《C程序设计语言》(The C Programming Language)这本书怎么样,怎么看起来这么不理解?~

挺好的呀,讲的很严谨。
慢慢看,边练习,边尝试,边理解。很多东西要看很多遍地。

给:
#include

int a[10]={4,7,2,9,1,3,8,5,0,6};
int partition(int p,int r)
{
int t,i,j,x;
i=p,j=r+1,x=a[p];
while(1)
{
while(a[++i]<x);
while(a[--j]>x);
if(i>=j)break;
t=a[i];
a[i]=a[j];
a[j]=t;
}
a[p]=a[j];
a[j]=x;
return j;
}

void qSort(int p,int r)
{
int q;
if(p<r)
{
q=partition(p,r);
qSort(p,q-1);
qSort(q+1,r);
}
}

void main()
{
qSort(0,9);
int i;
for(i=0;i<10;i++)
printf("%d ",a[i]);
}