c - 执行 C 程序时终端无响应

标签 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&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;

关于c - 执行 C 程序时终端无响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28261148/

相关文章:

c - 这个小的 C 程序是否满足 K&R 练习?

c - 如何在 C 程序中编译 Perl 代码?

c - 双指针不一致(链表)

java - 计算字符串 java 中某个元素出现次数的代码

javascript - 使用 jQuery 获取输入的默认值

c - 在函数调用中,什么是运算符,什么是操作数?

c - 如何连接 2 个 C 字符串,而不覆盖任何终止空字符?

c - 实现深度优先搜索时出错

c - 如何读取由c中的空格分隔的无符号字符

c - Kernighan 和 Ritchie C 练习 1-22(折叠长输入线)