Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 警告:函数的隐式声明';getline';_C_Project - Fatal编程技术网

C 警告:函数的隐式声明';getline';

C 警告:函数的隐式声明';getline';,c,project,C,Project,嗨,我的课上的一个项目快做完了。我需要根据几个因素对航空公司人员的优先级进行排序。这是我的项目描述: “航空公司使用以下公式确定航班上乘客的优先级 超售航班的等待名单。 优先权编号=(A/1000)+B-C 哪里 A是客户过去一年的总里程数 B是他或她的飞行常客计划的年数 C是一个序列号,表示客户预订订单时的到达位置 航班 给出下表所示的超额预订客户文件,编写一个程序读取 文件,并确定每个客户的优先级编号。然后程序构建优先级队列 使用优先级编号并按优先级顺序打印等待客户列表。” 我觉得我的代码包

嗨,我的课上的一个项目快做完了。我需要根据几个因素对航空公司人员的优先级进行排序。这是我的项目描述:

“航空公司使用以下公式确定航班上乘客的优先级 超售航班的等待名单。 优先权编号=(A/1000)+B-C 哪里 A是客户过去一年的总里程数 B是他或她的飞行常客计划的年数 C是一个序列号,表示客户预订订单时的到达位置 航班 给出下表所示的超额预订客户文件,编写一个程序读取 文件,并确定每个客户的优先级编号。然后程序构建优先级队列 使用优先级编号并按优先级顺序打印等待客户列表。”

我觉得我的代码包含了主要思想,但我在getline方面遇到了问题。当我编译代码(如下所示)时,它会给我一个错误: “| 24 |警告:函数‘getline’[-Wimplicit函数声明]的隐式声明”|”

请帮我解决这个问题,这样它就可以编译了。我试过很多东西,但都不管用

代码如下:

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    FILE * fp; //create file pointer to be read later
    char * line = NULL;
    int temp,count=0,len=0,mileage[100],read,years[100],sequence[100],priority[100];
    char name[100][100],tempst[100];
    fp = fopen("customers.txt", "r"); //opening the file

    if (fp == NULL)
        exit(EXIT_FAILURE);
    int i;



    while ((read = getline(&line, &len, fp)) != -1) { //start reading file and recording data
        i=0;

        while(line[i]!=' ' || (line[i+1]>='A' && line[i+1]<='z'))
        {
            name[count][i]=line[i];
            i++;
        }
        name[count][i++]='\0';
        mileage[count]=0;

        while(line[i]!=' ')
        {
            mileage[count]=mileage[count]*10+(line[i]-'0');
            i++;
        }
        i++;
        years[count]=0;

        while(line[i]!=' ')
        {
            years[count]=years[count]*10+(line[i]-'0');
            i++;
        }
        i++;
        sequence[count]=0;

        while(line[i]!='\0')
        {
            sequence[count]=sequence[count]*10+(line[i]-'0');
            i++;
        }
        priority[count]=(mileage[count]/1000)+years[count]-sequence[count];
        count++;

    }

    for( i=0;i<count-1;i++) // calculate priority
    {
        for(int j=i+1;j<count;j++)
        {
            if(priority[i]<priority[j])
            {
                temp=priority[i];
                priority[i]=priority[j];
                priority[j]=temp;
                strcpy(tempst,name[i]);
                strcpy(name[i],name[j]);
                strcpy(name[j],tempst);
            }
        }
    }

    for( i=0;i<count;i++) //print priority
    {
        printf("%s %d\n",name[i],priority[i]);
    }
    return 0;
}
定义GNU源
#包括
#包括
#包括
int main()
{
FILE*fp;//创建要稍后读取的文件指针
char*line=NULL;
整数温度,计数=0,长度=0,里程[100],读取,年[100],序列[100],优先级[100];
字符名[100][100],tempst[100];
fp=fopen(“customers.txt”,“r”);//打开文件
如果(fp==NULL)
退出(退出失败);
int i;
while((read=getline(&line,&len,fp))!=-1){//开始读取文件并记录数据
i=0;
while(行[i]!=''| |(行[i+1]>='A'&行[i+1]
#定义| GNU|源
#包括

#定义POSIX_C_SOURCE200809L
#包括
应该让您在GNU系统上使用
getline
,但是可能有另一种方法在不同的POSIX系统上启用它

这样启用
getline
后,应键入
len
变量
size\u t
,而不是
int
,以便
&len
正确键入为
size\u t*


您的项目测试软件可能不支持
getline
POSIX函数,在这种情况下,您可能需要重新考虑标准C函数的设计。

line
的传递不正确。请参阅此处,了解如何正确使用
getline
:另外,为什么
len=0
?@Everyone Passing
和line
其中
line==(char*)0
以及
和(size_t){0}
是受支持使用的
getline
POSIX函数:。@PSkocik my bad。不知道POSIX支持此功能。我做了您建议的更改,但仍然得到相同的错误..隐式声明。未定义对getline的引用。我不明白是什么原因造成的。我在一些在线C编译器上尝试了此功能,但它们编译时没有使用此功能s错误。我正在使用MingGW编译器处理代码块。``int main(){FILE*fp;//创建要稍后读取的文件指针char*line=NULL;size\u t*len=0;ssize\u t read;int temp,count=0,里程[100],年[100],序列[100],优先级[100];char name[100][100],tempst[100];fp=fopen(“customers.txt”,“r”);//如果(fp==NULL)退出(退出失败),则打开文件;int i;while((read=getline(&line,&len,fp))!=-1){//开始读取文件并记录数据i=0;…``@CoderJoe
MinGW
不支持POSIX。你学校的测试环境也可能不支持POSIX。@CoderJoe-如果你没有
getline()
,那么使用
fgets()
和一个足够大小的固定缓冲区来保存该行。(例如
char-line[1024]
就可以了——不要吝啬于缓冲区大小——如果在TI MSP432这样的微控制器上,可以适当地将最长的行数减少到2倍)
#define  _GNU_SOURCE
#include <stdio.h>
#define  _POSIX_C_SOURCE 200809L
#include <stdio.h>