读书人

求讲解这道题 多谢

发布时间: 2012-08-28 12:37:01 作者: rapoo

求讲解这道题 谢谢
题干:
设计并测试一个函数,其功能是读取输入行里的第一个单词到数组,并丢掉该行中其他的字符。一个单词的定义是一串字符,其中不含空格、制表符和换行符。

这个是我写的:

#include <stdio.h>
#include <ctype.h>
#include <string.h>

void input(char *p)
{
int i;
puts("输入字符串");
fgets(p,81,stdin);

for(i=0;i<81;i++)
if(isspace(p[i]))
p[i] = '\0';
fputs(p,stdout);

}


int main(void)
{
char ar[81];
int i;

input(ar);

return 0;
}


这个是标准答案:
#include <stdio.h>
#include <ctype.h>

void word(char *p);

int main(void)
{
char a[81];
puts("input your string:");
gets(a);
word(a);
puts(a);

return 0;
}

void word(char *p)
{
int begin,end;
for(begin=0; isspace( *(p+begin) ) ;begin++) continue;
for(end=begin; !isspace( *(p+end) ) ;end++) continue;
*(p+end) = '\0';
for(; *(p + begin) != '\0'; p++)
*p = *(p + begin);
*p = '\0';
}

但是2个程序我拿到IDE上都不能通过编译。不知道问题出在哪。希望能讲解下。谢谢




[解决办法]
答案是对的,还可以这样写
flag=0;
for(i=0;p[i];i++)
if(p[i]!=' ')
break;
for(j=i;p[j];j++)
if(p[j]==' ')
break;
从i到j就是第一个单词
[解决办法]
if(isspace(p[i])) {
p[i] = '\0';
break;
}
在这儿找到第一个单词后就应该退出来,所以需要break:
[解决办法]
你的答案是对的,vc编译通过,gcc编译通过 运行也没问题
[解决办法]
你的程序是正确的,VC可以编译过去,main函数里多了一个无用的i
[解决办法]

探讨
用到文件函数应该有文件的打开和关闭

[解决办法]
程序编译运行通过。

读书人网 >C语言

热点推荐