我不知道如何处理启动此程序时遇到的问题:
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
或其他任何东西。)
发生了什么?
答案 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;