执行C程序时无响应的终端

时间:2015-02-01 09:08:03

标签: c input kernighan-and-ritchie

我不知道如何处理启动此程序时遇到的问题:

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] = c;
        ++i;
    }
    s[i] = '\0';

直到这一点,它是K&amp; R教科书练习1-16的字面副本。它将输入中的所有字符存储在一个数组中,直到达到一定的固定大小并计算所有这些字符。

    for (i=i; c!= EOF && c!='\n'; ++i);
    if (c == '\n')
        ++i;

    return i;
}

这是我添加的部分。我的问题是每当我尝试运行这个程序时,如果我输入一个比数组范围更长的字符串(如果我编写的代码控制了),我只是在Windows命令提示符中找到一个哔哔点(我可以& #39; t输入任何东西,Ctrl+Z或其他任何东西。)

发生了什么?

1 个答案:

答案 0 :(得分:3)

for (i=i; c!= EOF && c!='\n'; ++i);是一个无限循环。您没有阅读任何新角色,也没有重置c的值。所以,如果程序来到这个代码并且c不是EOF也不是换行符,它会永远循环。

你可能想要像

这样的东西
for (i=i; (c=getchar())!= EOF && c!='\n'; ++i); 

while ((c=getchar())!= EOF && c!='\n') ++i;