int main(){
char s[100]={0};
char *p=s;
int num=0,flag=0,wnum=0,line=0;
while ((gets(s))!=EOF) {
if ((*p>='a'||*p<='z')||(*p>='Z'||*p<='A')) {
wnum++;
if (flag==0) {
*p-=32;
}
flag=1;
}
else{
if (flag==1){
num++;
flag=0;
}
if (*p=='\n'||*p=='\0') {
line++;
}
}
p++;
}
int ave=wnum/num;
printf("Number of lines: %d\nNumber of words: %d\nAverage length of a word: %d",line,num,ave);
}
输入多行之后,command+z还是结束不了输入
请问问题在哪里?
有什么更好的接受多行文字的方法吗?
这是原题,希望不是我错误理解题意了……
谢谢...
你的主要問題是eof輸入錯誤了。 win下是ctrl z但是mac下不是,而是ctrl d 注意不是common
樓主試試在
printf
之前輸出num
,很大機率是等於0的。最嚴重的問題:
1、
gets(s)
每次返回一行而不是一次性返回EOF之前的全部字元!樓主可能是這一點想錯了,如果不是請看下面的分析。2、為什麼num=0?
gets(s)
每次讀一行,s是字符串,樓主每次只判斷了一個字符*p,就繼續下一次循環了,輸入的樣例很可能會導致num =0的就是num++那句不會執行。應該再加一重循環while(*p!='
這個問題,c語言之父寫的那本書有解答。