値がないときの処理

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 値がないときの処理

Re: 値がないときの処理

#2

by かずま » 4年前

べけん さんが書きました:
4年前
二つの座礁データから距離が10未満のものだけを抜き出しmeanを記録することを3つのデータで行うプログラムを書こうとしましたが
距離が10未満のものがない場合にmeanを255にするという手段がわかりません。

最終的なテキストとしては

180 120 150
255 140 130
255 160 255...
入力データが何かわからないと、結果だけを見せられても困ります。
入力の 3つのファイルの内容を 3行ずつにして、
期待する出力表示を書いてください。

値がないときの処理

#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");
        
        

ページトップ