能幫我解釋一下這個程序嗎?特別是我標注的幾個地方,看不懂
mrs_empress
2016-10-06 19:20:15
TA貢獻2條經驗 獲得超2個贊
//望采納,嘻嘻
/*?這個程序是讀入一組文本行,并把最長的文本行打印出來?*/?
#include?<stdio.h>
#define?MAXLINE?1000
?
int?getline(char?line[],int?maxiline);
void?copy(char?to[],char?from[]);
/*?打印最長的輸入行?*/?
main()
{
????int?len;????????????????????/*?當前行長度??*/?
????int?max;???????????????????/*?目前為止發現的最長行的長度?*/?
????char?line[MAXLINE];???????/*?當前的輸入行?*/?
????char?longest[MAXLINE];???/*?用于保存最長的行?*/?
/*?打印最長的輸入行??*/????
????max?=?0;
????while?((len?=?getline(line,MAXLINE))?>?0)
????????if?(len?>?max){
????????????max?=?len;
????????????copy(longest,line);
????????}
????if?(max?>?0)??????????/*?存在這樣的行??*/???????????//這里的if語句是為了判斷是否有輸入行,有則輸出最長的,沒有就return?0;
????????printf("%s",longest);
????return?0;
}
/*?getline函數:將一行讀入到s中并返回其長度??*/?
int?getline(char?s[],int?lim)
{
????int??c,i;
????for?(i=0;?i<lim-1?&&?(c=getchar())!=EOF?&&?c!='\n';?++1)???//因為i是從0開始的,所以i最后到lim-1
????????s[i]?=?c;
????if?(c?==?'\n'){??????????????????//前面不等于\n成立時只執行s[i]?=?c;。后面的等于\n,不僅要執行s[i]?=?c;?還要執行++i;
???????s[i]?=?c;?
????????++i;
????}???
????s[i]?=?'\0';????????????????????//在c語言中,字符是按其所對應的ASCII碼來存儲的,一個字符占一個字節。第一個ASCII碼,對是0,對應的字符是(Null),其實就是‘\0’,即空字符??梢酝ㄟ^如下ASCII碼表來查詢到。????
????return?i;??????????
}
/*?copy函數:將from復制到to;這里假定to足夠大??*/?
void?copy(char?to[],char?from[])
{
????int?i;
?????
????i=0;
????while?((to[i]?=?from[i])?!=?'\0')
????????++i;
}
TA貢獻11條經驗 獲得超2個贊
/*?這個程序是讀入一組文本行,并把最長的文本行打印出來?*/?
#include?<stdio.h>
#define?MAXLINE?1000
int?getline(char?line[],int?maxiline);
void?copy(char?to[],char?from[]);
/*?打印最長的輸入行?*/?
main()
{
int?len;????????????????????/*?當前行長度??*/?
int?max;???????????????????/*?目前為止發現的最長行的長度?*/?
char?line[MAXLINE];???????/*?當前的輸入行?*/?
char?longest[MAXLINE];???/*?用于保存最長的行?*/?
/*?打印最長的輸入行??*/?
max?=?0;
while?((len?=?getline(line,MAXLINE))?>?0)
if?(len?>?max){
max?=?len;
copy(longest,line);
}
if?(max?>?0)??????????/*?存在這樣的行??*/???????????//這里的if語句有什么用,是為了排除'\0'的存在嗎?
printf("%s",longest);
return?0;
}
/*?getline函數:將一行讀入到s中并返回其長度??*/?
int?getline(char?s[],int?lim)
{
int??c,i;
for?(i=0;?i<lim-1?&&?(c=getchar())!=EOF?&&?c!='\n';?++1)???//這里的lim-1是什么意思?且我用軟件編譯時提示錯誤,為什么??
s[i]?=?c;
if?(c?==?'\n'){??????????????????//為什么前面不等于\n,現在要等于\n,做的事情不是都一樣嗎??
s[i]?=?c;
++i;
}
s[i]?=?'\0';????????????????????//為什么又把它變為0,那么賦值有什么作用呢??
return?i;
}
/*?copy函數:將from復制到to;這里假定to足夠大??*/?
void?copy(char?to[],char?from[])
{
int?i;
i=0;
while?((to[i]?=?from[i])?!=?'\0')
++i;
}舉報