现在我只是想让我的getline()函数起作用。我有书中的代码,它似乎是相同的,但我不能让它编译。这是家庭作业,但这部分应该只是从书中复制。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//error list
#define ENDOFFILE = -1;
#define TOOMANYNUMS = -2;
#define LIMIT = 256;
//functions declared
int get_line(char line[], int);
//main
main(){
char line[255];
int num[6];
printf("Please input numbers %c: ", line);
get_line(line,LIMIT);
}
//functions
int get_line(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';
return i;
}
现在(编辑于10:22)我只收到一个错误:
18 - 等于
之前的预期表达式答案 0 :(得分:2)
现在我只是想让我的getline()函数起作用。
getline()
是Linux函数的名称,在stdio.h
中声明。 C编译器抱怨说有两个冲突的声明。
只需为getline()
功能提供不同的名称即可。
Edit1 :那:
#define ENDOFFILE = -1;
应该是
#define ENDOFFILE -1
预处理程序指令不需要=
,没有;
。
答案 1 :(得分:2)
'getline'的冲突类型
getline可能是标准库中的一个函数,例如thisone。如果要重新实现它,请为其指定一个不同的名称。
函数'getline'的参数太少
你在main()中调用getline()而没有任何参数,但是你上面的几行声明getline采用char []和int。称之为getline(line,sizeof line);
答案 2 :(得分:1)
问题似乎是您正在编译此系统的系统似乎已经定义了getline()
函数,并且您的定义与此相矛盾。似乎glibc(Linux上使用的C库)具有在stdio.h
中声明的非标准getline()
函数。除非您包含#define _GNU_SOURCE
之类的行来选择包含非标准函数,否则不应该定义它,但可能是根据您编译代码的方式预先定义的。
最简单的解决方案是将您的函数重命名为其他内容,但您也可以尝试在编译器选项中找到为什么要启用GNU扩展。
既然您已经编辑了代码,那么您的第二个问题就是#define
行是错误的。你不需要一个平等或分号;这些由preprocessor处理,其语法与C不同,您需要做的就是写#define NAME VALUE
。
正确的语法是:
#define ENDOFFILE -1
#define TOOMANYNUMS -2
#define LIMIT 256
答案 3 :(得分:0)
你需要意识到:
希望这会有所帮助。