私は、実行時に動的に入力されたファイルで、ALIVE/SEARCH/BYEBYE (3 つすべて、2 つの組み合わせ、または 1 つの単独のいずれか) の uuid 発生の統計を取得する必要があるプロジェクトに取り組んでいます。
3つの組み合わせすべてを印刷できますが、1つまたは2つの組み合わせでは印刷できません.
私のinput.txtが次のような場合:
uuid:22314754-a597-490b-8a93-02cfae01036b ALIVE 16
uuid:22314754-a597-490b-8a93-02cfae01036b BYEBYE 8
uuid:22314754-a597-490b-8a93-02cfae01036b SEARCH 8
uuid:50e65653-7525-485d-83bf-d293558c4264 ALIVE 32
uuid:50e65653-7525-485d-83bf-d293558c4264 BYEBYE 8
uuid:50e65653-7525-485d-83bf-d293558c4264 SEARCH 132
uuid:55076f6e-6b79-4d65-6497-180373763bc1 ALIVE 113
uuid:55076f6e-6b79-4d65-6497-180373763bc1 BYEBYE 112
uuid:55076f6e-6b79-4d65-6497-180373763bc1 SEARCH 111
uuid:T0100203354 ALIVE 1
uuid:T0100203354 BYEBYE 2
uuid:T0100203354 SEARCH 3
私のコード:
#include<stdio.h>
#include<string.h>
struct uid
{
char uid_val[100];
char state[100];
int temp_count;
int alive_count;
int search_count;
int bye_count;
} UID[100];
int main()
{
char str[100];
int i = 0;
int line = 0;
char temp_val[100] = "waseem";
FILE *fp1 = fopen("input.txt","r");
FILE *fp2=fopen("output.txt","w");
printf("init value is %s \n",temp_val);
while(!feof(fp1))
{
fscanf(fp1,"%s %s %d",UID[i].uid_val,UID[i].state,&UID[i].temp_count);
int ret = 0;
ret=strcmp(UID[i].uid_val,temp_val);
if (ret!=0)
{
printf("new UID_val is %s\n",UID[i].uid_val);
}
else
{
}
temp_val[0] = '\0';
strcpy(temp_val,UID[i].uid_val);
if(strcmp(UID[i].state,"ALIVE")==0)
{
UID[i].alive_count = UID[i].temp_count;
}
else if(strcmp(UID[i].state,"BYEBYE")==0)
{
UID[i].search_count = UID[i].temp_count;
}
else
{
UID[i].bye_count = UID[i].temp_count;
}
line++;
if(line%3 == 0)
{
i++;
}
}
int n = 0;
//fp2=fopen("output.txt","w");
if (fp2==NULL)
{
printf("cant output to file\n");
}
else
{
fprintf(fp2,"Device ID\t\t\t\t\tALIVE\tBYEBYE\tSEARCH\n");
for(n = 0;n < i;n++)
{
fprintf(fp2,"%s\t%d\t%d\t%d\n",UID[n].uid_val,UID[n].alive_count,UID[n].search_count,UID[n].bye_count);
}
}
fclose(fp1);
fclose (fp2);
return 0;
}
}
次の出力が得られます:(output.txt)
Device ID ALIVE BYEBYE SEARCH
uuid:22314754-a597-490b-8a93-02cfae01036b 16 8 8
uuid:50e65653-7525-485d-83bf-d293558c4264 32 8 132
uuid:55076f6e-6b79-4d65-6497-180373763bc1 113 112 111
uuid:T0100203354 1 2 3
uuid の出現がすべて 3 (ALIVE/SEARCH/BYEBYE) である必要はなく、出現は任意の組み合わせでコードが機能するように、コードを一般化したいと考えています。たとえば、input.txt に次のものが含まれていると、コードに間違った結果が返されます。
uuid:22314754-a597-490b-8a93-02cfae01036b BYEBYE 8
uuid:22314754-a597-490b-8a93-02cfae01036b SEARCH 8
uuid:50e65653-7525-485d-83bf-d293558c4264 ALIVE 32
uuid:50e65653-7525-485d-83bf-d293558c4264 BYEBYE 8
uuid:55076f6e-6b79-4d65-6497-180373763bc1 ALIVE 113
uuid:55076f6e-6b79-4d65-6497-180373763bc1 BYEBYE 112
uuid:55076f6e-6b79-4d65-6497-180373763bc1 SEARCH 111
uuid:T0100203354 BYEBYE 2
gcc/g+ コンパイラに ubuntu を使用しています。