#1
by べけん » 4年前
プログラム初心者です
二つの座礁データから距離が10未満のものだけを抜き出しmeanを記録することを3つのデータで行うプログラムを書こうとしましたが
距離が10未満のものがない場合にmeanを255にするという手段がわかりません。
最終的なテキストとしては
180 120 150
255 140 130
255 160 255...
といった感じです
おそらく!="\0"の部分違うと思うのですがどのように書き換えればよいかわかりません。
環境はlinuxです
コード:
#include <stdio.h> // fopen, fclose, fgets, sscanf, printf
#define MAX_DATA 16384
struct Data { int ev, area, mean, min, max, x, y; };
struct Data data[5][MAX_DATA];
int readData(struct Data *p, int size, const char *fname)
{
FILE *fp = fopen(fname, "r");
if (!fp) { printf("%s: file cannnot open\n", fname); return -1; }
char buf[16384];
fgets(buf, sizeof buf, fp); // skip the first line
int i;
for (i = 0; i < size && fgets(buf, sizeof buf, fp); i++, p++) {
//or (i = 0; i < size && fgets(buf, sizeof buf, fp); i++) {
if (sscanf(buf, "%d,%d,%d,%d,%d,%d,%d", &p->ev, &p->area,
&p->mean, &p->min, &p->max, &p->x, &p->y) != 7) {
printf("%s: sscanf failed\n", fname); return -2;
}
//printf("%d %d %d %d\n", p->ev, p->mean, p->x, p->y);
}
fclose(fp);
return i;
}
int main(void)
{
int fnum;
printf("write number20~36");
scanf("%d",&fnum);
//printf("write 3 nambers");
//scanf("Results%s.csv",fname);
//scanf("Results%s.csv",*fname[2]);
//scanf("Results%s.csv",*fname[3]);
char fname0[20];//= "Results66.csv";
char fname1[20];//= "Results67.csv";
char fname2[20];//= "Results68.csv";
//char fname3[20];
//char fname4[20];
sprintf(fname0,"Results%d.csv",fnum-2);
sprintf(fname1,"Results%d.csv",fnum-1);
sprintf(fname2,"Results%d.csv",fnum);
//sprintf(fname3,"Results%d.csv",fnum+1);
//sprintf(fname4,"Results%d.csv",fnum+2);
int line[5];
line[0] = readData(data[0], MAX_DATA, fname0);
line[1] = readData(data[1], MAX_DATA, fname1);
line[2] = readData(data[2], MAX_DATA, fname2);
int t=255;
struct Data *q = data[0];
struct Data *p = data[1];
struct Data *r = data[2];
for (int i = 0; i < line[1]; i++,p++) {
for (int j = 0; j < line[0]; j++,q++) {
int x = p->x - q->x, y = p->y - q->y, R1 = x*x + y*y;
if(R1<10){
printf("%d\n",q->mean);//条件を満たすq->meanを書き出す
if(q->mean !="\0"){
printf("%d",t);//条件を満たすq->meanが存在しない場合は255
}
}
}
printf("%d\n",p->mean);
for (int k = 0; k < line[2]; k++,r++) {
int x = p->x - r->x, y = p->y - r->y, R2 = x*x + y*y;
if(R2<10){
printf("%d\n",r->mean);//条件を満たすr->meanを書き出す
//fprintf(outputfile2, "%d,", p->mean);
if(r->mean !="\0"){
printf("%d",t);//条件を満たすr->meanが存在しない場合は255
}
}
}
printf("\n");
}
printf("\n");
プログラム初心者です
二つの座礁データから距離が10未満のものだけを抜き出しmeanを記録することを3つのデータで行うプログラムを書こうとしましたが
距離が10未満のものがない場合にmeanを255にするという手段がわかりません。
最終的なテキストとしては
180 120 150
255 140 130
255 160 255...
といった感じです
おそらく!="\0"の部分違うと思うのですがどのように書き換えればよいかわかりません。
環境はlinuxです
[code]
#include <stdio.h> // fopen, fclose, fgets, sscanf, printf
#define MAX_DATA 16384
struct Data { int ev, area, mean, min, max, x, y; };
struct Data data[5][MAX_DATA];
int readData(struct Data *p, int size, const char *fname)
{
FILE *fp = fopen(fname, "r");
if (!fp) { printf("%s: file cannnot open\n", fname); return -1; }
char buf[16384];
fgets(buf, sizeof buf, fp); // skip the first line
int i;
for (i = 0; i < size && fgets(buf, sizeof buf, fp); i++, p++) {
//or (i = 0; i < size && fgets(buf, sizeof buf, fp); i++) {
if (sscanf(buf, "%d,%d,%d,%d,%d,%d,%d", &p->ev, &p->area,
&p->mean, &p->min, &p->max, &p->x, &p->y) != 7) {
printf("%s: sscanf failed\n", fname); return -2;
}
//printf("%d %d %d %d\n", p->ev, p->mean, p->x, p->y);
}
fclose(fp);
return i;
}
int main(void)
{
int fnum;
printf("write number20~36");
scanf("%d",&fnum);
//printf("write 3 nambers");
//scanf("Results%s.csv",fname);
//scanf("Results%s.csv",*fname[2]);
//scanf("Results%s.csv",*fname[3]);
char fname0[20];//= "Results66.csv";
char fname1[20];//= "Results67.csv";
char fname2[20];//= "Results68.csv";
//char fname3[20];
//char fname4[20];
sprintf(fname0,"Results%d.csv",fnum-2);
sprintf(fname1,"Results%d.csv",fnum-1);
sprintf(fname2,"Results%d.csv",fnum);
//sprintf(fname3,"Results%d.csv",fnum+1);
//sprintf(fname4,"Results%d.csv",fnum+2);
int line[5];
line[0] = readData(data[0], MAX_DATA, fname0);
line[1] = readData(data[1], MAX_DATA, fname1);
line[2] = readData(data[2], MAX_DATA, fname2);
int t=255;
struct Data *q = data[0];
struct Data *p = data[1];
struct Data *r = data[2];
for (int i = 0; i < line[1]; i++,p++) {
for (int j = 0; j < line[0]; j++,q++) {
int x = p->x - q->x, y = p->y - q->y, R1 = x*x + y*y;
if(R1<10){
printf("%d\n",q->mean);//条件を満たすq->meanを書き出す
if(q->mean !="\0"){
printf("%d",t);//条件を満たすq->meanが存在しない場合は255
}
}
}
printf("%d\n",p->mean);
for (int k = 0; k < line[2]; k++,r++) {
int x = p->x - r->x, y = p->y - r->y, R2 = x*x + y*y;
if(R2<10){
printf("%d\n",r->mean);//条件を満たすr->meanを書き出す
//fprintf(outputfile2, "%d,", p->mean);
if(r->mean !="\0"){
printf("%d",t);//条件を満たすr->meanが存在しない場合は255
}
}
}
printf("\n");
}
printf("\n");
[/code]