首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

从资料流中读取一个单词的函数getword()的返回值为什么要这么设计

2013-08-04 
从文件流中读取一个单词的函数getword()的返回值为什么要这么设计?Now for the function getword. We have

从文件流中读取一个单词的函数getword()的返回值为什么要这么设计?
Now for the function getword. We have written a more general getword than is necessary for this program, but it is not complicated. getword fetches the next ``word'' from the input, where a word is either a string of letters and digits beginning with a letter, or a single non?white space character. The function value is the first character of the word, or EOF for end of file, or the character itself if it is not alphabetic.
这是书上的代码:


// 返回值为什么要这么设计?
/* getword: get next word or character from input */
int getword(char *word, int lim)
{
    int c, getch(void);
    void ungetch(int);
    char *w = word;
    while (isspace(c = getch()))
        ;
    if (c != EOF)
        *w++ = c;
    if (!isalpha(c))
    {
        *w = '\0';
        return c;
    }
    for ( ; ??lim > 0; w++)
        if (!isalnum(*w = getch()))
        {
            ungetch(*w);
            break;
        }
    *w = '\0';
    return word[0];
}

我再贴上书上的主调函数吧:

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define MAXWORD 100
int getword(char *, int);
int binsearch(char *, struct key *, int);
/* count C keywords */
main()
{
    int n;
    char word[MAXWORD];
    while (getword(word, MAXWORD) != EOF)
        if (isalpha(word[0]))
            if ((n = binsearch(word, keytab, NKEYS)) >= 0)


                keytab[n].count++;
    for (n = 0; n < NKEYS; n++)
        if (keytab[n].count > 0)
            printf("%4d %s\n",
                   keytab[n].count, keytab[n].word);
    return 0;
}


[解决办法]
这样的返回设计主要是为了方便迭代(调用的时候一条语句即可,否则至少需要两条语句),并且返回多余的信息(字符串本身并不包含EOF字符,而这样的设计可以直接返回EOF),简化调用层次。

热点排行