ANSI C编程[已关闭]

neskvpey  于 2023-03-28  发布在  其他
关注(0)|答案(4)|浏览(125)

**已关闭。**此问题为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

我多次检查代码,但无法找出错误。

ajsxfq5m

ajsxfq5m1#

去掉多余的

return -1; 

} // end of strindex

而且你的#include是空的。你没有使用任何头文件。

r6l8ljro

r6l8ljro2#

代码中有两个问题。
(i).第40行:

for (i = i, k = 0; t[k] != '\0' && s[j] == t[k]; j++, k++)

编译器可能会将i = i的错误引发为Assignment to itself 'i = i'
(ii).第45行:
一个额外的}。删除这个。然后尝试构建。我修改了你的代码,它成功地构建了。

#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
ijxebb2r

ijxebb2r3#

}
return -1;

使用return操作符移除线上方的}支撑。

bq3bfh9z

bq3bfh9z4#

如果我们从缩进和代码结构来判断,我认为第一行缺少了左括号:

for (i =0; s[i] != '\0'; i++)

在最后一个函数中。所以实际的行应该看起来像:

for (i =0; s[i] != '\0'; i++) {

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

相关问题