读书人

一个简单代码中的一个异常找了3个小

发布时间: 2012-10-21 09:00:07 作者: rapoo

一个简单代码中的一个错误,找了3个小时问题了,未遂,求教!!
//功能:把输入行中的第一个单词放进数组(第一个单词前如果有空格,要滤掉空格)

#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;
}
}


[解决办法]
在循环前面加上://忽略前导空白字符
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.希望楼主以后注意这样的细节
[解决办法]

探讨
//功能:把输入行中的第一个单词放进数组(第一个单词前如果有空格,要滤掉空格)

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

char *getword(char *name);

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

读书人网 >C语言

热点推荐