Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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 从文件中检索缺少的条目_C_Arrays_Nested Loops - Fatal编程技术网

C 从文件中检索缺少的条目

C 从文件中检索缺少的条目,c,arrays,nested-loops,C,Arrays,Nested Loops,假设有一个文本文件“Measures”如下所示: 伦敦10.5 伦敦2.1.0 东京32.0 伦敦6 18.4 东京11-1.0 东京1-0.3 多伦多3-1.0 伦敦8.0 多伦多11.0 多伦多1210.4 伦敦7-5.6 其中第一列存储城市名称,第二列表示测量发生的月份,第三列只是给定城市当月的平均温度。现在,我想要的是读取所有这些数据,并找出某个城市(例如伦敦3号、东京6号等)在哪个月内没有条目,然后将所有这些都放在名为“错误”的文本文件中。 我是这样尝试的,但最终还是被卡住了:

假设有一个文本文件“Measures”如下所示:

伦敦10.5
伦敦2.1.0
东京32.0
伦敦6 18.4
东京11-1.0
东京1-0.3
多伦多3-1.0
伦敦8.0
多伦多11.0
多伦多1210.4
伦敦7-5.6
其中第一列存储城市名称,第二列表示测量发生的月份,第三列只是给定城市当月的平均温度。现在,我想要的是读取所有这些数据,并找出某个城市(例如伦敦3号、东京6号等)在哪个月内没有条目,然后将所有这些都放在名为“错误”的文本文件中。 我是这样尝试的,但最终还是被卡住了:

#包括
#包括
#包括
结构城市{
字符名[20];
整月;
浮动平均值;
};
内部扫描(结构城市*arr,内部透镜)
{
文件*fp=fopen(“measurements.txt”、“r”);
如果(fp==NULL){
printf(“读取时出错”);
出口(1);
}
int i=0;
而((fscanf(fp,“%12s%d%f\n”,arr[i].name,&arr[i].month,&arr[i].avg))==3)
i++;
fclose(fp);
返回i;
}
无效排序(结构城市*arr,整数长度)
{
结构城市温度[100];
int i,j;
对于(i=0;i0){
温度[i]=arr[i];
arr[i]=arr[j];
arr[j]=温度[i];
}
}
}
}
int main()
{
结构城市数组[100];
int len=扫描(阵列,1000);
排序(数组,len);
文件*fout;
fout=fopen(“missing.txt”,“w”);
如果(fout==NULL){
printf(“打印时出错”);
出口(1);
}
int i;
对于(i=1;i对于(j=1;j您可以构建一个月数组,该数组将具有一个整数值,指示该月是否存在,然后对每个花旗名称进行迭代,直到城市名称在while循环中更改,使数组中的每个条目等于文件中每个条目的
1
,该数组将包含缺少的月份位置-1,a
0
,因此如果它不存在,则将该值输出到文件

这是密码

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

struct City {
    char name[20];
    int month;
    float avg;

};

int scan(struct City *arr, int len)
{
    FILE *fp = fopen("measurements.txt", "r");
    int   i  = 0;

    if (fp == NULL) {
        printf("Error while reading.");
        exit(1);
    }

    while ((fscanf(fp,"%12s%d%f\n", arr[i].name, &arr[i].month, &arr[i].avg)) == 3)
        i++;
    fclose(fp);

    return i;

}

void sort(struct City *arr, int len)
{
    struct City temp[100];
    int         i, j;

    for (i = 0 ; i < len - 1 ; i++) {
        for (j = i + 1 ; j < len; j++) {
            int compare = strcmp(arr[i].name, arr[j].name);
            if(compare > 0) {
                temp[i] = arr[i];
                arr[i]  = arr[j];
                arr[j]  = temp[i];
            }
        }
    }

}

int main()
{
    struct City array[100];
    FILE       *fout;
    int         len;
    const char *previous;
    int         month;

    len = scan(array, 100);
    if (len == 0)
        return -1;
    sort(array, len);

    fout = fopen("missing.txt","w");
    if (fout == NULL) {
        printf("Error while printing");
        return -1;
    }
    previous = NULL;
    month    = 1;
    for (int i = 0 ; i < len ; i++) {
        int months[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

        previous = array[i].name;
        while (strcmp(previous, array[i].name) == 0)
        {
            int month;
            month = array[i].month;
            if ((month >= 0) && (month < 12))
                months[month - 1] = 1;
            i += 1;
        }
        i -= 1;

        for (int j = 0 ; j < 12 ; j++)
        {
            if (months[j] != 0)
                continue;
            fprintf(fout, "%15s%5d\n", previous, j + 1);
        }
    }
    fclose(fout);

    return 0;
}
#包括
#包括
#包括
结构城市{
字符名[20];
整月;
浮动平均值;
};
内部扫描(结构城市*arr,内部透镜)
{
文件*fp=fopen(“measurements.txt”、“r”);
int i=0;
如果(fp==NULL){
printf(“读取时出错”);
出口(1);
}
而((fscanf(fp,“%12s%d%f\n”,arr[i].name,&arr[i].month,&arr[i].avg))==3)
i++;
fclose(fp);
返回i;
}
无效排序(结构城市*arr,整数长度)
{
结构城市温度[100];
int i,j;
对于(i=0;i0){
温度[i]=arr[i];
arr[i]=arr[j];
arr[j]=温度[i];
}
}
}
}
int main()
{
结构城市数组[100];
文件*fout;
内伦;
常量字符*先前;
整月;
len=扫描(阵列,100);
如果(len==0)
返回-1;
排序(数组,len);
fout=fopen(“missing.txt”,“w”);
如果(fout==NULL){
printf(“打印时出错”);
返回-1;
}
previous=NULL;
月=1;
对于(int i=0;i=0)和&(月<12))
月份[月份-1]=1;
i+=1;
}
i-=1;
对于(int j=0;j<12;j++)
{
如果(月[j]!=0)
继续;
fprintf(fout,“%15s%5d\n”,先前,j+1);
}
}
fclose(fout);
返回0;
}

你为什么不使用SQL?为什么重新编辑代码?你添加了什么吗?还要使用更多的空格以使代码清晰易读,编译器无论如何都会忽略它们。不,我只是更正了语法错误。感谢你的编辑。小心,你试图访问数组之外的内容:数组[m-1]当m==0时。这可能就是你找不到匹配项的原因。捕捉得好。但这似乎并不能解决问题,它会打印所有月份的数据。