c - 第 50 行从类型 'Ev' 到类型 'int' 的不兼容类型

标签 c linux

调度程序.c 我正在为类(class)制定日程安排程序,但我遇到了这个错误。它表示类型“int”与“Ev”类型不兼容。我很困惑这可能意味着什么。

int main()
{
 Ev *event; 
    int numEvents=0;
    int option;
    int x;
    int y;

    char menu[]="1 - Insert a new event\n2 - Display all events\n3 - Now?\n4 - Delete expired\n0 - Exit\nPlease select an option: ";

    event = malloc(sizeof(Ev) *numEvents);
    CopynumEvents(&numEvents);
    for (y=0; y<numEvents; y++)
    {
        event = realloc(event, sizeof(Ev) * (y + 1));



     **MY ERROR SEEMS TO BE AROUND THIS AREA**

        event[y]=CopyfromFile(numEvents,y);   
   }

    option = MenuOption(menu); 
    while(1)
    {
        switch(option)
        {
            case(1):           

                event = realloc(event, sizeof(Ev) * (numEvents + 1));
                numEvents++;
                event[numEvents - 1]=InsertEvent();            
                ArrangeEvents(event,numEvents);
                CopytoFile(numEvents, event);              
                option = MenuOption(menu);             
                break;

            case(2):

                if (numEvents!=0)
                {
                    for (x=0;  x<numEvents;  x++)
                    {                      
                        DisplayEvent(event[x]);
                    }
                }
                else
                {
                    printf("No event in scheduler\n");
                }
                option = MenuOption(menu);             
                break;

            case(3):

                ActiveEvents(event, numEvents);
                option = MenuOption(menu);
                break;

            case(4):

                DeleteExpired(event, &numEvents);
                CopytoFile(numEvents, event);
                option = MenuOption(menu);
                break;

            case(0):

                free(event);
                exit(1);       
                break; 

        }
    }          
}

int MenuOption(char *prompt)
{
    char buffer[100];
    int option;

    do
    {
        printf("%s", prompt);

        /* Get a line of up to 100 characters */
        fgets(buffer, sizeof(buffer), stdin);

        /* Remove any \n we may have input */
        if(strlen(buffer) > 0)
            buffer[strlen(buffer)-1] = '\0';

        sscanf(buffer, "%d", &option);

    }while(option!=1 && option!=2 && option!=3 && option!=4 && option!=0);

    return option;
}

struct Event InsertEvent()
{
    struct Event E1;

    printf("What is the event: ");          
    InputEventname(E1.name, sizeof(E1.name));   
    E1.date = InputDate("Event date: ");
    E1.start = InputTime("Start time: ",E1.date);
    do
    {
    E1.end = InputTime("End time: ",E1.date);
    }while(E1.end<=E1.start);

    return E1;
}

void InputEventname(char *str, int max)
{
    char buffer[100];

    /* Get a line of up to 100 characters */
    fgets(buffer, sizeof(buffer), stdin);

    /* Remove any \n we may have input */
    if(strlen(buffer) > 0)
        buffer[strlen(buffer)-1] = '\0';

    /* Copy up to max characters to our string */
    strncpy(str, buffer, max);
    str[max-1] = '\0';
}


time_t InputTime(char *prompt, time_t date)
{
    char buffer[100];
    char *result;
    struct tm time;

    time = *localtime(&date);

    do
    {
        printf("%s", prompt);

        /* Get a line of up to 100 characters */
        fgets(buffer, sizeof(buffer), stdin);

        /* Remove any \n we may have input */
        if(strlen(buffer) > 0)
            buffer[strlen(buffer)-1] = '\0';

        result = strptime(buffer, "%I:%M%p", &time);

    } while(result == NULL);

    return mktime(&time);
}


time_t InputDate(char *prompt)
{
    char buffer[100];
    char *result;
    struct tm date;

    do
    {
        printf("%s", prompt);

        /* Get a line of up to 100 characters */
        fgets(buffer, sizeof(buffer), stdin);

        /* Remove any \n we may have input */
        if(strlen(buffer) > 0)
            buffer[strlen(buffer)-1] = '\0';

        result = strptime(buffer, "%m/%d/%Y", &date);

    } while(result == NULL);

    /* Convert to time_t format */
    date.tm_min = 0;
    date.tm_hour = 0;
    date.tm_sec = 0;   
    date.tm_isdst = 1;

    return mktime(&date);
}

这是我的标题。我相信我已经正确完成了这部分

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stdbool.h>
#include <string.h>

#define __USE_XOPEN
#include <time.h>


#include "scheduler.h"

/*

 * This is my scheduling program!!
 */


/* Our possible scheduling states */
#define NewEvent 1
#define AllEvents 2
#define Now 3
#define Expired 4
#define Exit 0




#ifndef DISPLAY_H
#define DISPLAY_H

typedef struct Event
{    
   char name[50];      
    time_t date;  
   time_t start;    
   time_t end;  
int y;
}Ev;

int MenuOption(char *prompt);
struct Event InsertEvent();
void InputEventname(char *str, int max);
time_t InputDate(char *prompt);
time_t InputTime(char *prompt, time_t date);
void DisplayEvent(Ev event);


#endif

最佳答案

__USE_XOPEN是一个内部名称;它不应该由你设置。您应该使用 #define _XOPEN_SOURCE 700 或类似的值(500、600 或 700)。此外,它应该在包含任何 POSIX header 之前设置。标准 C 头文件也是 POSIX 头文件。

您应该在问题中给出确切的错误消息(文件的路径名除外,如果它们长于大约 20 个字符;将它们缩减为基本名称)。信息的一个关键组成部分是行号;您应该在文件中标识该行,除非它是第 1 行(可能一直到第 10 行,但如果您不标记有错误的行,则不要省略任何行)。

既然你说编译器警告:

incompatible types to type 'Ev' from type 'int'

您可能会遇到 malloc()realloc() 未声明的问题,或者可能是 CopyfromFile() 这是未声明。如果在使用函数之前未声明该函数,C 编译器将假定它返回一个 int — 这对于 C89 和准标准 C 来说是正确的。严格来说,对于 C99 或 C11,编译器应该拒绝编译,但大多数人不会这样做,除非您告诉他们这样做。

如果您使用 GCC 进行编译,请使用严格的警告选项 — 特别是警告您缺少原型(prototype)。我使用:

gcc -O3 -g -std=c11 -Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes \
    -Wold-style-definition -Werror …

您也可以使用 -Wold-style-declaration ,或者改为使用,并且某些(较旧)版本的 GCC 可能不支持 -Wold-style-* 选项。如果您的代码使用这些选项可以干净地编译,则可以避免很多问题。

关于c - 第 50 行从类型 'Ev' 到类型 'int' 的不兼容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23305264/

相关文章:

计算文件夹中 txt 文件的数量以及最旧的文件(如果文件数量大于 10)?

c - 与数字进行比较是否总是需要 ASCII 格式?

c - 如何实现定时循环?

c - 洗牌和洗牌后未洗牌的字符串与原始字符串不同

ASP.NET vNext DNX : Command not found when run from a script? 可能是路径问题?

c - "STATUS: Too many open files in system"打开和锁定

linux - while循环出错?脚本

linux - 无法使用ssh在sh文件上调用带有变量的命令

c# - linux wine Word 互操作 application.Documents.Open 在 word 中打开文档但不将文档返回给客户端

linux - nohup 和 & 在运行 bash 命令时有什么区别?