求讲解这道题 谢谢

chuizi112233 2012-08-06 06:58:57
题干:
设计并测试一个函数,其功能是读取输入行里的第一个单词到数组,并丢掉该行中其他的字符。一个单词的定义是一串字符,其中不含空格、制表符和换行符。

这个是我写的:

#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上都不能通过编译。不知道问题出在哪。希望能讲解下。谢谢


...全文
148 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
s030903012 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
用到文件函数应该有文件的打开和关闭
[/Quote]其实楼主这样写没错,因为stdin和stdout是默认打开的。
楼主写的程序和标准答案都可以在VC上正确编译和执行,但是楼主自己写的程序有点缺陷,就是不能过滤第一个单词前的空白符。
chuizi112233 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]
引用 2 楼 的回复:
用到文件函数应该有文件的打开和关闭
其实楼主这样写没错,因为stdin和stdout是默认打开的。
楼主写的程序和标准答案都可以在VC上正确编译和执行,但是楼主自己写的程序有点缺陷,就是不能过滤第一个单词前的空白符。
[/Quote]
谢谢指出BUG 我再看下
chuizi112233 2012-08-06
  • 打赏
  • 举报
回复
好 谢谢各位的帮忙 结贴吧!
didijiji 2012-08-06
  • 打赏
  • 举报
回复
程序编译运行通过。
wanglu343280746 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
用到文件函数应该有文件的打开和关闭
[/Quote]
这个不需要读取文件好不好
wanglu343280746 2012-08-06
  • 打赏
  • 举报
回复
你的程序是正确的,VC可以编译过去,main函数里多了一个无用的i
wh421246400 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

谢谢你了 有BUG吗?
[/Quote]
我也是刚学过字符串,只比你多看一章0.0
编译器没有提示,不过我们用文件函数,在这里确实不用文件的打开和关闭,因为我们用的是stdin、stdout
仅供参考,共同进步!
chuizi112233 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
你的答案是对的,vc编译通过,gcc编译通过 运行也没问题
[/Quote]
谢谢你了 有BUG吗?
chuizi112233 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
用到文件函数应该有文件的打开和关闭
[/Quote]
文件的打开和关闭 学习了 看来13章要好好学 谢谢
wh421246400 2012-08-06
  • 打赏
  • 举报
回复
你的答案是对的,vc编译通过,gcc编译通过 运行也没问题
chuizi112233 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
if(isspace(p[i])) {
p[i] = '\0';
break;
}
在这儿找到第一个单词后就应该退出来,所以需要break:
[/Quote]
谢谢 你们能通过编译吗? 能帮我看看我写那个程序是对的吗? 我的IDE不知道出了什么毛病 倒是可以显示第一条puts 但是一输入系统就报警 程序就Done了 不知道为什么 表准答案也是如此
chuizi112233 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
答案是对的,还可以这样写
flag=0;
for(i=0;p[i];i++)
if(p[i]!=' ')
break;
for(j=i;p[j];j++)
if(p[j]==' ')
break;
从i到j就是第一个单词
[/Quote]
谢谢 你们能通过编译吗? 能帮我看看我写那个程序是对的吗? 我的IDE不知道出了什么毛病 倒是可以显示第一条puts 但是一输入系统就报警 程序就Done了 不知道为什么 表准答案也是如此
自信男孩 2012-08-06
  • 打赏
  • 举报
回复
if(isspace(p[i])) {
p[i] = '\0';
break;
}
在这儿找到第一个单词后就应该退出来,所以需要break:
vanguards 2012-08-06
  • 打赏
  • 举报
回复
答案是对的,还可以这样写
flag=0;
for(i=0;p[i];i++)
if(p[i]!=' ')
break;
for(j=i;p[j];j++)
if(p[j]==' ')
break;
从i到j就是第一个单词
vanguards 2012-08-06
  • 打赏
  • 举报
回复
用到文件函数应该有文件的打开和关闭
chuizi112233 2012-08-06
  • 打赏
  • 举报
回复
不知道我写的对不对 字符串这章的习题好繁琐

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧