谁能告诉我 mgetline 在做什么?我不明白

错综复杂的

我无法理解 mgetline 在这段代码中做了什么。任何人都可以帮助我吗?

int mgetline(char s[],int lim)
{
    int c, i;
    
    for(i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
        s[i] = c;
    
    if(c == '\n')
    {
        s[i] = c;
        ++i;
    }
    
    s[i] = '\0';

    return i;
}

泰德·林格莫

该函数基本上从标准输入流中逐个读取字符,stdin直到您输入\n(换行符)或达到s,的数组限制lim字符存储在 中,char s[]并返回读取内容的长度。

很难用更多细节来回答,因为你不明白它是什么有点不清楚,但我试图对代码进行注释以使其更清晰。

这是相同的代码,只是重新格式化以适合我的评论。

int mgetline(char s[], int lim) {
    int c, i;
    
    for(i = 0;                // init-statement, start with `i` at zero
        i < lim - 1           // condition, `i` must be less than `lim - 1`
        &&                    // condition, logical AND
        (c = getchar()) !=EOF // (function call, assignment) condition, `c` must not be EOF
        &&                    // condition, logical AND
        c != '\n';            // condition, `c` must not be `\n` (newline)
        ++i)                  // iteration_expression, increase i by one
    {
        s[i] = c;             // store the value of `c` in `s[i]`
    }

    if(c == '\n') {           // if a newline was the last character read
        s[i] = c;             // store it
        ++i;                  // and increase i by one
    }
    
    s[i] = '\0';              // store a null terminator last

    return i;                 // return the length of the string stored in `s`
}

循环condition部分,for您必须具备 3 个条件,true循环才能进入语句for(...;...;...) statement我已将该语句放入代码块中,以便更容易查看作用域。如果输入流 ( ) 关闭EOF,则返回一个特殊值getchar()stdin

注意:如果传递 char( lim == 1)的数组,此函数将导致未定义的行为任何读取未初始化变量的程序都有未定义的行为——这是一件坏事。在这种情况下,如果lim == 1,您将c在循环之后读取c然后仍然未初始化。

要么初始化它:

int mgetline(char s[], int lim) {
    int c = 0, i;

或退出函数:

int mgetline(char s[], int lim) {
    if(lim < 2) {
        if(lim == 1) s[0] = '\0';
        return 0;
    }
    int c, i;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我不明白Delphi中的Application.ProcessMessages在做什么

我不明白这个 PHP 代码,它在做什么?

递归问题(我只是不明白它在做什么)

谁能告诉我这个密码的名称?

谁能告诉我如何实现?

谁能告诉我这段代码的作用?

谁能告诉我这行的意思?

尝试从源代码中抓取所有href。我不明白我在做什么错

我不明白为什么这段代码会出现分段错误。拜托,谁能告诉我我在哪里分配了无法使用的内存

谁能告诉我我的代码出了什么问题

谁能告诉我我的功能出了什么问题?

谁能告诉我为什么8> 7 <6 = true?

谁能告诉我这段代码是什么意思?

谁能告诉我为什么不返回该值?

谁能告诉我这个符号是什么

请谁能告诉我为什么输出是这样的?(蟒蛇)

谁能告诉我为什么该功能可以工作?

谁能告诉我代码中发生了什么?

谁能告诉我该语法的调用方式及其作用?

谁能告诉我这种效果是如何实现的?

谁能告诉我排序算法的大 O 时间?

谁能告诉我上述代码之间的逻辑区别

谁能告诉我这种奇怪故障的原因?

谁能告诉我这个 javascript 等价物

谁能告诉我Shopify Api的工作原理?

Flutter:谁能告诉我这些包的名字?

谁能告诉我nginx和kong的版本映射?

谁能告诉我 laravel 中 get() 和 all() 的区别?

任何人都可以将此 linq 代码转换为 SQL 查询(因为我不明白它在做什么)?