簡體   English   中英

警告:函數“getline”的隱式聲明

[英]warning: implicit declaration of function 'getline'

嗨,我幾乎完成了課堂上的一個項目。 我需要根據幾個因素對航空公司中人員的優先級進行排序。 這是我的項目描述:

“一家航空公司使用以下公式來確定超額預訂航班候補名單上乘客的優先級。優先級編號 = (A / 1000) + B - C 其中 A 是客戶過去一年的總里程 B 是編號在他或她的常旅客計划中的年數 C 是一個序列號,代表客戶在他或她預訂航班時的到達位置。給定一個如下表所示的超額預訂客戶的文件,編寫一個程序來讀取文件並確定每個客戶的優先級編號。然后程序使用優先級編號構建一個優先級隊列,並按優先級順序打印等待客戶的列表。”

我覺得我的代碼包含了主要思想,但我在使用 getline 時遇到了問題。 當我編譯代碼(如下所示)時,它給了我一個錯誤:“|24|警告:函數‘getline’的隱式聲明[-Wimplicit-function-declaration]|”

請幫我解決這個問題,以便它可以編譯。 我嘗試了很多東西,但沒有任何效果。

這是代碼:

#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;
}
#define  _GNU_SOURCE
#include <stdio.h>

或者

#define  _POSIX_C_SOURCE 200809L
#include <stdio.h>

應該讓您在 GNU 系統上獲得getline ,但可能還有另一種方法可以在不同的 POSIX 系統上啟用它。

像這樣啟用getline后,應該將len變量輸入size_t ,而不是int以便&len正確輸入為size_t *

您的項目測試軟件可能不支持getline POSIX 函數,在這種情況下,您可能需要根據標准 C 函數重新考慮您的設計。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM