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