c语言简单问题.书上例题,怎么看怎么不明白.希望能高人前来指点.
程序file1.c中的代码如下:#include"stdio.h"voidinput(char*s){charc;printf("inputtext\n");c=getc...
程序file1.c中的代码如下:
#include "stdio.h"
void input (char *s){
char c;
printf("input text \n");
c=getchar();
while(c!=EOF){
*s++=c;
c=getchar();
}
*s='\0';
}
程序file2.c中的代码如下:
void count(char *s,int *nw,int *nl){
char *p=s;
int word=0;
*nw=*nl=0;
while(*p!='\0'){
if(*p=='\n') *nw++;
if(*p==' '||*p=='\t'||*p=='\n')
word=0;
else if(word==0){
*nl++;
word=1;
}
p++;
}
}
程序file3.c中的代码如下:
#include "stdio.h"
void output(char *s){
puts(s);
}
程序file4.c中的代码如下:
#include "stdio.h"
void main(){
char s[80];
int nw,nl;
input(s);
count(s,&nw,&nl);
output(s);
printf("\n text words %d,line %d \n",nw,nl);
}
程序功能是输入一段文本,存放到字符数组中文本的末尾以EOF结束,文本中单词以空格符.换行符和跳格符分开,统计单词个数和行数,输出文本.
运行结果为:
intput text:
the capital of
china
beijing
I love
china
^z
the capital of
china
beijing
I love china
china
text words 8,line 5
运行结果不对呀,运行结果说有8个单词和5行......这明显不对......求解
还有我根本就没运行出来,因为运行以后没办法推出dos只能不停的输入单词 展开
#include "stdio.h"
void input (char *s){
char c;
printf("input text \n");
c=getchar();
while(c!=EOF){
*s++=c;
c=getchar();
}
*s='\0';
}
程序file2.c中的代码如下:
void count(char *s,int *nw,int *nl){
char *p=s;
int word=0;
*nw=*nl=0;
while(*p!='\0'){
if(*p=='\n') *nw++;
if(*p==' '||*p=='\t'||*p=='\n')
word=0;
else if(word==0){
*nl++;
word=1;
}
p++;
}
}
程序file3.c中的代码如下:
#include "stdio.h"
void output(char *s){
puts(s);
}
程序file4.c中的代码如下:
#include "stdio.h"
void main(){
char s[80];
int nw,nl;
input(s);
count(s,&nw,&nl);
output(s);
printf("\n text words %d,line %d \n",nw,nl);
}
程序功能是输入一段文本,存放到字符数组中文本的末尾以EOF结束,文本中单词以空格符.换行符和跳格符分开,统计单词个数和行数,输出文本.
运行结果为:
intput text:
the capital of
china
beijing
I love
china
^z
the capital of
china
beijing
I love china
china
text words 8,line 5
运行结果不对呀,运行结果说有8个单词和5行......这明显不对......求解
还有我根本就没运行出来,因为运行以后没办法推出dos只能不停的输入单词 展开
4个回答
展开全部
if(*p=='\n') *nw++;
if(*p==' '||*p=='\t'||*p=='\n')
word=0;
else if(word==0){
*nl++;
……
这里的*nw++跟*nl++有木有写翻了?
经过我的修改,现在貌似很不错了,在turbo c 2.0下:
#include "stdio.h"
void input (char *s){
char c;
printf("input text \n");
c=getchar();
while(c!=EOF){
*s++=c;
c=getchar();
}
*s='\0';
}
void count(char *s,int *nw,int *nl){
char *p=s;
int word=0;
*nw=*nl=0;
while(*p!='\0'){
if(*p=='\n'){
(*nl)++;//dodo has edited this
}
if(*p==' '||*p=='\t'||*p=='\n'){
word=0;
}
else if(word==0){
(*nw)++;//dodo has edited this
word=1;
}
p++;
}
}
void output(char *s){
puts(s);
}
void main(){
char s[80];
int nw,nl;
input(s);
count(s,&nw,&nl);
output(s);
printf("\n text words %d,line %d \n",nw,nl);
getchar();//dodo has added this
}
/*
执行演示:
input text
the capital of
china
beijing
china
i love china
^Z
the capital of
china
beijing
china
i love china
text words 9,line 5
*/
if(*p==' '||*p=='\t'||*p=='\n')
word=0;
else if(word==0){
*nl++;
……
这里的*nw++跟*nl++有木有写翻了?
经过我的修改,现在貌似很不错了,在turbo c 2.0下:
#include "stdio.h"
void input (char *s){
char c;
printf("input text \n");
c=getchar();
while(c!=EOF){
*s++=c;
c=getchar();
}
*s='\0';
}
void count(char *s,int *nw,int *nl){
char *p=s;
int word=0;
*nw=*nl=0;
while(*p!='\0'){
if(*p=='\n'){
(*nl)++;//dodo has edited this
}
if(*p==' '||*p=='\t'||*p=='\n'){
word=0;
}
else if(word==0){
(*nw)++;//dodo has edited this
word=1;
}
p++;
}
}
void output(char *s){
puts(s);
}
void main(){
char s[80];
int nw,nl;
input(s);
count(s,&nw,&nl);
output(s);
printf("\n text words %d,line %d \n",nw,nl);
getchar();//dodo has added this
}
/*
执行演示:
input text
the capital of
china
beijing
china
i love china
^Z
the capital of
china
beijing
china
i love china
text words 9,line 5
*/
展开全部
先解决结束输入的问题
输入这些后
the capital of
china
beijing
I love
china
先换行,然后按Ctrl+z,会显示^Z,然后回车,就可以了
输入这些后
the capital of
china
beijing
I love
china
先换行,然后按Ctrl+z,会显示^Z,然后回车,就可以了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Ctrl+z或Ctrl+d
可以结束,
取决于输入EOF的设定
可以结束,
取决于输入EOF的设定
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
更多资料可登录松翰单片机论坛:http://www.sonix-mcu.com
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询