问一个关于 C 语言的问题

查看 7|回复 0
作者:Canglin   
现在再看 Cprimerplus ,第 11 章的练习 3 题目是:
设计并测试一个函数,从一行输入中把一个单词读入一个数组中,并丢弃输入行中的其余字符。该函数应该跳过第 1 个非空白字符前面的所有空白。将一个单词定义为没有空白、制表符或换行符的字符序列。
我写了一版:
#define LIM 81
#include
#include
void getnchar(char *str);
void test11_13_03()
{
    char str[LIM];
    puts("Please Enter your String:");
    getnchar(str);
    printf("This String is :-----%s\n", str);
}
void getnchar(char *str)
{
    int c, index = 0;
    while ((c = getchar()) != EOF && isspace(c))
    {
    }
    while (!isspace(c))
    {
        str[index++] = c;
        c = getchar();
    }
    str[index] = '\0';
}
然后我从 ChatGPT 问了一下,它是这么做的:
#include
#include
#define LEN 10
char *getword(char *str);
int main() {
    char word[LEN];
    printf("Please enter a word (EOF to quit):\n");
    while (getword(word) != NULL) {
        printf("Result: %s\n", word);
        printf("You can enter a word again (EOF to quit):\n");
    }
    printf("Done.\n");
    return 0;
}
char *getword(char *str) {
    int ch, n = 0;
    char *pt = str;
    while ((ch = getchar()) != EOF && isspace(ch)) {
    }
    if (ch == EOF) {
        return NULL;
    }
    *str++ = ch;
    n++;
    while ((ch = getchar()) != EOF && !isspace(ch) && n
这段代码中
    if (ch == EOF) {
        return NULL;
    }
    *str++ = ch;
    n++;
    while ((ch = getchar()) != EOF && !isspace(ch) && n
我没看明白这咕噜:
*str++ = ch;
    n++;
为啥 str 不在 while 循环中,但是可以持续自增而不是自增 1 次就结束了
为了 GPT 半天,它也答不出来个所以然,大概就是因为所以自有道理的回答
您需要登录后才可以回帖 登录 | 立即注册

返回顶部