我不知道如何处理我在启动这个程序时遇到的问题:
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/