値がないときの処理

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
べけん
記事: 21
登録日時: 4ヶ月前

値がないときの処理

#1

投稿記事 by べけん » 1週間前

プログラム初心者です
二つの座礁データから距離が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");
        
        

かずま

Re: 値がないときの処理

#2

投稿記事 by かずま » 1週間前

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

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

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

返信

“C言語何でも質問掲示板” へ戻る