执行 C 程序时终端无响应

Inresponsive terminal while executing a C program

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

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] = '[=10=]';

到目前为止,它是 K&R 教科书练习 1-16 的字面副本。它将输入的所有字符存储在一个数组中,直到某个固定大小,并对所有这些字符进行计数。

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

    return i;
}

这是我添加的部分。我的问题是每当我尝试 运行 这个程序时,如果我输入的字符串比数组的范围长(如果我编写的代码控制),我最终会在 Windows 命令提示符(我无法输入任何内容,也无法输入 Ctrl+Z 或其他任何内容)。

发生什么事了?

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;