一个简单代码中的一个错误,找了3个小时问题了,未遂,求教!!

snrrk1184 2012-08-10 11:41:21
//功能:把输入行中的第一个单词放进数组(第一个单词前如果有空格,要滤掉空格)

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

char *getword(char *name);

int main(void)
{
char name[20];
getword(name);
puts(name);

system("pause");
return 0;
}

char *getword(char *name)
{
char ch = EOF;

//while( ( ch = getchar() ) != EOF && isspace( ch ) )
// continue;
//putc(ch, stdin);
/* 这三句我想滤掉空格,并且把最后读入的非空格往回输入缓冲区,可是如果不输入空格,直接输入单词,会丢掉前两个字符。*/

while((ch = getchar()) != EOF && !isspace(ch))
{
*name++ = ch;
}
if(name[0] == EOF)
return NULL;
else
{
*name = '\0';
return name;
}
}
...全文
190 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tian_waifieitianz 2012-08-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
//功能:把输入行中的第一个单词放进数组(第一个单词前如果有空格,要滤掉空格)

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

char *getword(char *name);

int main(void)
{
char name[20];
getword(name);
puts(name);
……
[/Quote]

我想提醒楼主的是 getword 函数返回值是字符串末尾‘\0’的地址,其实这个函数可以不要返回值的。
linguangliang 2012-08-11
  • 打赏
  • 举报
回复
在循环前面加上://忽略前导空白字符
while((ch = getchar()) != EOF && isspace(ch))
;
*name++ = ch;
//另外我强烈建议不要用char 和EOF比,例如如果系统将char处理成unsigned char,那么遇到EOF时保存到ch中,置为0xff,ch与EOF(-1)比较时进行类型提升,提升成unsigned int,此时ch对应的值为0x000000ff,与-1对应的值0xffffffff不相等!!,本身库函数getchar就将返回值定义成int(这样既包含EOF,又包括ascii码),目的就是让你不要随便将其转换成char.希望楼主以后注意这样的细节
xt646449830 2012-08-11
  • 打赏
  • 举报
回复
char ch = EOF;


getchar 返回值为int型的
IVERS0N 2012-08-10
  • 打赏
  • 举报
回复
while((ch = getchar()) != EOF )
{
if(ch == ' ')
continue;
*name++ = ch;
}
fzamygsd 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
不用了,应该是ungetc()是我记错了
[/Quote]
神马情况,。。。
snrrk1184 2012-08-10
  • 打赏
  • 举报
回复
不用了,应该是ungetc()是我记错了

69,371

社区成员

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

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