【问题标题】:What does c!='\n' do in a for statement?c!='\n' 在 for 语句中做了什么?
【发布时间】:2016-10-17 13:47:26
【问题描述】:

我是一名初学者,正在学习使用 k&r 的 c 编程书进行编码。现在有这个“输入一组文本行并打印最长的程序”的例子

我给你完整的代码:

    #include<stdio.h>
    #define MAXLINE 1000

    int getline(char line[], int maxline);
    void copy(char to[], char from[]);

    int main()
    {
    int len;
    int max;
    char line[MAXLINE];
    char longest[MAXLINE];
    max=0;

    while((len=getline(line,MAXLINE))>0)
    if(len>max)
    {
    max=len;
    copy(longest,line);
    }
    if(max>0)
    printf("%s",longest);
    return 0;
    }

    int getline(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]='\n';
    i++;
    }
    s[i]='\0';
    return i;
    }

    void copy(char to[], char from[])
    {
    int i;
    i=0;
    while((to[i]=from[i])!='\0')
    i++;
    }

现在告诉我,在 getline 函数中,在语句中:

    for(i=0;i<lim-1&&(c=getchar())!=EOF&&c!='\n';i++)

我们为什么要使用“c!='\n'”

这个for语句之后的代码是什么意思,即

     s[i]=c;
     if(c=='\n)
     {
     s[i]=c;
     i++;
     }
     s[i]='\0'

为什么我们在这里使用 s[i]='\0'?

i++; 条件中的i++; 语句?

【问题讨论】:

  • 请编辑您的问题并修正缩进。
  • 你确定书中没有解释这些概念吗?
  • mr michael 可能是因为打字错误..我第一次使用堆栈溢出
  • @yogirajput 你可以编辑你的问题并改进它。
  • @yogirajput 请先修复缩进,没人想看这个烂摊子。

标签: c


【解决方案1】:

for(i=0;i&lt;lim-1&amp;&amp;(c=getchar())!=EOF&amp;&amp;c!='\n';i++) 为什么我们使用c!='\n'

当用户输入\n(换行符)字符或换句话说,当用户点击enter 键时,我们使用c!='\n' 停止扫描输入字符。

为什么我们在if(c=='\n') 条件中使用s[i]='\0'i++; 语句

  • i++用于最后一次增加数组/字符串的索引值,以容纳终止'\0'空字符。

  • s[i]='\0' 用于以空字符终止\结束字符串。这对于标记字符串的结尾和在范围内打印字符串(最多 '\0' 字符)是必不可少的

【讨论】:

  • 这在打印时很有用......它不仅有用,而且绝对必要。
  • 这样他就可以在bounds内访问了。对吧? @MichaelWalz
  • 这样他就可以在范围内访问哪个范围?访问什么?在 C 中,字符串以零结尾,句点。
  • @yogirajput 你应该从非常简单的程序开始认真学习 C。那里有大量的教程。如果你的程序没有在字符串的末尾放置一个终止 NUL 字符,那么没有其他人会这样做。
  • @yogirajput 是的,完全正确。
【解决方案2】:

getline 函数错误。

这是更正的可读版本:

int getline(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]='\n';
      i++;
    }
  }

  s[i]='\0';
  return i;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 2011-08-27
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    相关资源
    最近更新 更多