首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ANSI C编程

ANSI C编程
EN

Stack Overflow用户
提问于 2014-04-04 16:30:37
回答 4查看 377关注 0票数 0

在由K&R编写的ANSI C编程的第69页上,有一个函数的示例,该函数用作Unix程序grep的特殊版本。

代码是:

代码语言:javascript
运行
复制
#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

当我编译它时,我得到

代码语言:javascript
运行
复制
51:1:error: expected identifier or '(' before 'return'
54:1:error: expected identifier or '(' before '}' token

我检查了代码的次数,但找不到错误。

EN

回答 4

Stack Overflow用户

发布于 2014-04-04 16:33:48

去掉多余的

代码语言:javascript
运行
复制
return -1; 

} // end of strindex

还有,你的#include is empty.You没有使用任何头文件。

票数 1
EN

Stack Overflow用户

发布于 2014-04-04 17:00:15

您的代码中有两个问题。

(i)。第40行:

代码语言:javascript
运行
复制
for (i = i, k = 0; t[k] != '\0' && s[j] == t[k]; j++, k++)

作为Assignment to itself 'i = i',编译器可能会为i = i引发错误

(ii)。第45行:

额外的}。删除这个。然后尝试构建。我修改了你的代码,它成功地构建了。

代码语言:javascript
运行
复制
     #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 = 1, k = 0; t[k] != '\0' && s[j] == t[k]; j++, k++)
            ;
    if (k > 0 && t[k] == '\0')
        return i;

return -1;

} // end of strindex
票数 1
EN

Stack Overflow用户

发布于 2014-04-04 16:42:41

如果我们根据缩进和代码结构来判断,我认为行中缺少左括号:

代码语言:javascript
运行
复制
for (i =0; s[i] != '\0'; i++)

在最后一个函数中。因此,实际的代码行应该如下所示:

代码语言:javascript
运行
复制
for (i =0; s[i] != '\0'; i++) {

last函数中有多个错误。另一个原因是j没有初始化。正如我可以得出的结论,该函数应该搜索字符串中的子字符串的索引。第一个循环通过字符串s。第二个循环通过第二个字符串并比较两个字符串。如果比较到达第二个字符串的末尾,则返回found index,否则函数退出,索引为-1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22857482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档