**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。
这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
八年前就关门了。
Improve this question
在K&R的ANSI C编程的第69页上,有一个函数的例子,它作为Unix程序grep的特殊版本工作。
代码为:
#include <stdio.h>
#define MAXLINE 1000 //max input length
int getlinee(char line[], int max);
int Strindex(char source[], char searchfor[]);
char pattern[] = "ould";
int main ()
{
char line[MAXLINE];
int found =0;
while (getlinee(line,MAXLINE) > 0)
if (Strindex(line, pattern)>=0){
printf("%s", line);
found ++;
}
return found;
} // end of main function
int getlinee (char s[], int lim)
{
int c,i;
i =0;
while (--lim > 0 && (c=getchar()) != EOF && c!= '\n')
s[i++] =c;
if (c =='\n')
s[i++] =c;
s[i] = '\0' ;
return i;
}
int Strindex (char s[], char t[])
{
int i,j,k;
for (i =0; s[i] != '\0'; i++)
for (i =i, k=0; t[k] != '\0' && s[j] == t[k]; j++, k++);
if (k > 0 && t[k] == '\0')
return i;
}
return -1;
} // end of strindex
当我编译它的时候我得到
51:1:error: expected identifier or '(' before 'return'
54:1:error: expected identifier or '(' before '}' token
我多次检查代码,但无法找出错误。
4条答案
按热度按时间ajsxfq5m1#
去掉多余的
而且你的
#include
是空的。你没有使用任何头文件。r6l8ljro2#
代码中有两个问题。
(i).第40行:
编译器可能会将
i = i
的错误引发为Assignment to itself 'i = i'
(ii).第45行:
一个额外的
}
。删除这个。然后尝试构建。我修改了你的代码,它成功地构建了。ijxebb2r3#
使用
return
操作符移除线上方的}
支撑。bq3bfh9z4#
如果我们从缩进和代码结构来判断,我认为第一行缺少了左括号:
在最后一个函数中。所以实际的行应该看起来像:
在最后一个函数中有不止一个错误。另一个错误是
j
没有初始化。正如我可以得出的结论,该函数应该在字符串中搜索子字符串的索引。第一个循环通过字符串s
。第二个循环通过第二个字符串并比较两个字符串。如果比较到达第二个字符串的末尾,它返回找到的索引。否则函数以索引-1
退出。