C 检查输入是否已输入到数组中

C 检查输入是否已输入到数组中,c,arrays,C,Arrays,我试图在代码中包含一个检查,以查看是否输入了值。我的程序以(月-日-年)的格式对日期列表进行排序,当月份作为字符输入时 下面是一个应该发生什么的例子 3-要排序的n个日期的数目 格式中后跟n个日期(月-日-年) 二零零一年一月一日 一月一日00 一九九九年二月二十八日 然后用户检查是否以(月-日-年)的格式输入了日期 1100 最终输出: 按时间顺序排序的日期 然后告诉用户他们所做的检查是否在他们需要的数据中 输入(这是我需要帮助的内容) 这就是我试图检查是否输入了值的方式 int k; int

我试图在代码中包含一个检查,以查看是否输入了值。我的程序以(月-日-年)的格式对日期列表进行排序,当月份作为字符输入时

下面是一个应该发生什么的例子

3-要排序的n个日期的数目

格式中后跟n个日期(月-日-年)

二零零一年一月一日

一月一日00

一九九九年二月二十八日

然后用户检查是否以(月-日-年)的格式输入了日期

1100

最终输出:

按时间顺序排序的日期

然后告诉用户他们所做的检查是否在他们需要的数据中 输入(这是我需要帮助的内容)

这就是我试图检查是否输入了值的方式

int k;
int input[j];
scanf("%d", &input[j]);

for (i = 0; k < n; k++) {
    if (ar[i] == input[j]) {

        printf("Yes value is there");
    }
    else {

        printf("No value isn't");
    }
}
intk;
int输入[j];
scanf(“%d”,&input[j]);
对于(i=0;k
下面我已经发布了我的工作程序,没有尝试执行检查。运行此命令只返回按时间顺序排序的日期

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

/* constants for max chars, max day, max year, max size */
enum { MAXC = 12,
    MAX_DAY = 31,
    MAX_YEAR = 12,
    MAX_SIZE = 1000 };
typedef struct {
    char month[MAXC]; /* either make static or allocate separately */
    unsigned day;
    unsigned year;
    int monthnum;
} date;

/* empty character remaining in stdin */
void empty_stdin()
{
    int c;
    while ((c = getchar()) != '\n' && c != EOF) {
    }
}

int fix_year(int year)
{
    if (year >= 90)
        return 1900 + year;
    return 2000 + year;
}

/* sort struct date on year */
int sort(const void* a, const void* b)
{
    date* date1 = (date*)a;
    date* date2 = (date*)b;

    /*if (date2->year != date1->year)
        return (date1->year > date2->year) - (date1->year < date2->year);*/

    int year1 = fix_year(date1->year);
    int year2 = fix_year(date2->year);
    //return year2 - year1;

    //int month1 = date1->month;
    //int month2 = date2->month;

    if (date2->year != date1->year) {
        return year2 - year1;
    }
    else if (date2->month != date1->month) {
        int month1 = date1->month;
        int month2 = date2->month;

        return month2 - month1;
    }
    else if (date2->day != date1->day) {
        //else sort day
        int day1 = date1->month;
        int day2 = date2->month;

        /*int daycompare = date2->day - date1->day;
    return -daycompare;
    */

        return day2 - day1;
    }

    return 0;
}

/* output n elements of array of struct date */
void output(date* ar, int n)
{
    int i;

    printf("\nOutput sorted by year:\n\n");

    for (i = 0; i < n; i++)
        printf("  %s %d %d\n", ar[i].month, ar[i].day, ar[i].year);
}

int main(void)
{

    int i, n;
    date* ar = NULL;

    while (1) { /* obtain valid 'n', compare with using fgets below */

        int rtn; /* varaible to save return of scanf -- always validate */

        //printf ("Enter number of dates to be entered (between 1 & 1000): ");
        if ((rtn = scanf("%d", &n)) != 1) { /* if conversion failed */
            if (rtn == EOF) { /* test for user cancelation of input */
                fprintf(stderr, "note: user canceled input, exiting.\n");
                return 0;
            } /* otherwise simply an invalid input */
            fprintf(stderr, "error: invalid input.\n");
            goto tryagain;
        }

        if (n < 0) { /* invalid input < 0 */
            fprintf(stderr, "error: invalid input (n < 0).\n");
            goto tryagain;
        }

        if (n > MAX_SIZE) { /* invalid input > MAX_SIZE */
            fprintf(stderr, "error: invalid input (n > %d).\n", MAX_SIZE);
            goto tryagain;
        }

        break; /* if we are here - we have a good value, break */

    tryagain:; /* label for goto to jump over break */

        empty_stdin(); /* empty characters that remain in input buffer */
    }

    empty_stdin(); /* empty characters that remain in input buffer */

    /* allocate array of struct ar, n elements */
    if ((ar = malloc(sizeof *ar * n)) == NULL) {
        fprintf(stderr, "error: virtual memory exhausted.\n");
        return 1;
    }

    /* provide format instructions */
    //printf ("Enter the date (month day year)\n"
    // "  format, e.g.:  Jan 18 2017\n\n");

    for (i = 0; i < n; i++) { /* loop until all elements filled */

        char buf[MAX_DAY + 1] = "", ans[MAXC] = "";

        //printf (" date[%2d] : ", i + 1);    /* prompt for input */

        /* if fgets return is NULL, EOF encountered */
        if (fgets(buf, MAX_DAY + 1, stdin) == NULL) {
            fprintf(stderr, "note: user canceled input, exiting.\n");
            return 0;
        }

        if (*buf == '\n') { /* if first char is '\n', user just hit enter */
            printf("no input provided, quit (y/n)? ");
            if (fgets(ans, MAXC, stdin) && (*ans == 'y' || *ans == 'Y'))
                return 0;
            else if (!*ans) { /* if ans NULL, EOF encountered */
                fprintf(stderr, "note: user canceled input, exiting.\n");
                return 0;
            }
        }

        /* parse with sscanf, validate 3 conversion took place */
        if (sscanf(buf, "%11s %u %u", ar[i].month, &ar[i].day, &ar[i].year) != 3) {
            fprintf(stderr, "error: invalid input.\n");
            continue;
        }

        /* only increment if valid sscanf conversion took place */
    }

    //scanf("%d", &date_list[i].day);
    qsort(ar, n, sizeof(date), sort); /* sort by year */

    output(ar, n); /* output results */

    free(ar); /* free ar - you allocate it, you free it */

    return 0;
}
#包括
#包括
#包括
/*最大字符数、最大天数、最大年份、最大大小的常数*/
枚举{MAXC=12,
最大工作日=31天,
最大年数=12,
最大尺寸=1000};
类型定义结构{
char month[MAXC];/*可以是静态的,也可以是单独分配的*/
未签名日;
未签字年份;
内蒙特纳姆;
}日期;
/*stdin中剩余的空字符*/
void empty_stdin()
{
INTC;
而((c=getchar())!='\n'&&c!=EOF){
}
}
整数固定年(整数年)
{
如果(年份>=90)
返回1900+年;
返回2000+年;
}
/*按年份排序结构日期*/
整数排序(常量无效*a,常量无效*b)
{
日期*日期1=(日期*)a;
日期*日期2=(日期*)b;
/*如果(日期2->年份!=日期1->年份)
返回(date1->year->date2->year)-(date1->yearyear)*/
int year1=固定年(日期1->year);
int year2=固定年(日期2->year);
//返回年份2-年份1;
//int month1=日期1->月份;
//int month2=日期2->月份;
如果(日期2->年份!=日期1->年份){
返回年份2-年份1;
}
否则如果(日期2->月份!=日期1->月份){
int month1=日期1->月份;
int month2=日期2->月份;
返回月份2-月份1;
}
否则如果(date2->day!=date1->day){
//其他分类日
int day1=日期1->month;
int day2=日期2->月;
/*int daycompare=date2->day-date1->day;
返回日比较;
*/
返回第2天-第1天;
}
返回0;
}
/*输出struct date数组的n个元素*/
无效输出(日期*ar,整数n)
{
int i;
printf(“\n按年份排序的输出:\n\n”);
对于(i=0;i最大大小){/*无效输入>最大大小*/
fprintf(stderr,“错误:无效输入(n>%d)。\n”,最大大小);
goto tryagain;
}
break;/*如果我们在这里-我们有很好的价值,break*/
tryagain:;/*后藤跳过休息的标签*/
empty_stdin();/*保留在输入缓冲区中的空字符*/
}
empty_stdin();/*保留在输入缓冲区中的空字符*/
/*分配结构数组,n个元素*/
如果((ar=malloc(sizeof*ar*n))==NULL){
fprintf(stderr,“错误:虚拟内存耗尽。\n”);
返回1;
}
/*提供格式说明*/
//printf(“输入日期(月-日-年)\n”
//“格式,例如:2017年1月18日\n\n”);
对于(i=0;i
int cday,cyear,cmonth,i;
char-smonth[MAXC];
scanf(“%d%d%d”,&month,&day,&cyear);
月数到字符串(cmonth、smonth);
对于(i=0;iint cday, cyear, cmonth, i; 
char smonth[MAXC];
scanf("%d %d %d",&month ,&day, &cyear);
month_num_to_string(cmonth,smonth); 
for (i = 0; i < n; i++) {
   if (ar[i].day== cday && ar[i].year== cyear && !strcmp(smonth, ar[i].month) { 
       break;
   }
}
if (i<n) { 
   printf("Yes value is there\n"); 
} else { 
   printf("No value isn't\n"); 
}