【问题标题】:a loop won't break in C循环不会在 C 中中断
【发布时间】:2015-06-20 13:28:01
【问题描述】:

我一直在钻研 C 而不是使用scanf() 我想尝试构建我自己的函数来获得一整行。我编写了这个函数,它返回一行要在我的主函数中进行比较,但它不会跳出循环来打印我的结果。

我不知道这是实际功能还是我在main() 中是如何实现的。

代码如下:

main() {
    int len;
    int max = 0; //Largest line so far..
    char linetemp[MAXLINE]; 
    char linemax[MAXLINE];
    while((len = getLine(linetemp,MAXLINE))> 0){
        if(len>max){
            max = len;
            cpy(linemax,linetemp);
        }
    }   
    if(max>0) {  //If their was even a line
        printf("Longest Line:\n %s \n", linemax);
    } else {
        printf("No lines found!");
    }
}

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

【问题讨论】:

  • 在到达 EOF 之前,您不会跳出循环。你的代码对我来说看起来不错。你还没有发布cpy 的实现。这可能是您问题的根源吗?

标签: c loops


【解决方案1】:

main 中的while 循环仅在返回的长度为零时结束,但它永远不会结束,除非读取的唯一字符是 EOF。如果有人只是按 Enter,它将添加换行符并增加大小,因此返回 1。

也许您想删除if(c=='\n') 的特殊情况处理,如果有人按回车键而没有其他文本,则让它返回一个空字符串。

【讨论】:

  • 嗯,我试过了,但无济于事。它只是继续听 char。只包含空白。但是现在看到了,所以我正在考虑调整它,然后更改 main 中的 while 循环!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 2013-11-01
  • 2022-11-03
  • 1970-01-01
相关资源
最近更新 更多