私はCプログラミングで新しく、2つの.datファイルから画像を取得し、等しい。ファイルには最初にいくつかのイメージがあります。すべての画像が同じ場合は1を返す必要があります。 .datファイルの一つのc-format "%d"は 'int *'型の引数を受け取りますが、引数3はint型です
ピック:
最初の20は、画像の20 "グループ" を意味します。 3 4は3x4行列を意味し、残りは行列になります。他の19個の行列と同じです。
最初のファイルの最初の行列ともう1つのファイルの最初の行列などを比較する必要があります。私はそのようなコードか何かを理解するためにあなたを必要としません
#include <stdio.h>
#include <stdlib.h>
struct irudia{
int w,h;
unsigned char im[16][16];
};
int berdinak (struct irudia *im1, struct irudia *im2){
int berdin = 1;
if ((im1->w != im2->w) || (im1->h != im2->h)){
return 0;
}
for (int i = 0; i < im1 -> h; i++){
for (int j = 0; j < im1 -> w; j++){
if (im1->im[i][j] != im2->im[i][j]){
berdin = 0;
}
}
}
return berdin;
}
int main (int argc, char *argv[]){
int n1, n2;
int berdin = 1;
struct irudia i1, i2;
if (argc != 3){
printf("Errorea parametroetan. Programa amaitu da.\n");
exit(-1);
}
FILE *fitx1 = fopen(argv[1], "r");
FILE *fitx2 = fopen(argv[2], "r");
fscanf(fitx1, "%d", &n1);
fscanf(fitx2, "%d", &n2);
if (n1 != n2){
return 0;
}
struct irudia *p1 = &i1;
struct irudia *p2 = &i2;
while (!feof(fitx1) && berdin == 1){
fscanf (fitx1, "%d", &i1.h);
fscanf (fitx1, "%d", &i1.w);
fscanf (fitx2, "%d", &i2.h);
fscanf (fitx2, "%d", &i2.w);
for (int i = 0; i < i1.h; i++){
for (int j = 0; j < i1.w; j++){
fscanf (fitx1, "%d", (unsigned char)(i1.im[i][j]));
}
}
for (int i = 0; i < i2.h; i++){
for (int j = 0; j < i2.w; j++){
fscanf (fitx2, "%d", (unsigned char)(i2.im[i][j]));
}
}
berdin = berdinak (p1, p2);
}
fclose (fitx1);
fclose (fitx2);
return berdin;
}
:
これは私が書いたコードです。私は警告を取得していますなぜ私は
fscanf (fitx1, "%d", (unsigned char)(i1.im[i][j]));
警告は非常にはっきりとわかります。 '%d'は変数argに' int * 'を必要としますが、' int * 'ではない' i1.im [i] [j] 'を与えました。そして、不必要なキャストをしないでください。 – kaylum
タイトルに記載されているエラーが発生しない* 'fscanf()'はポインタを渡す必要があります。あなたは 'unsigned char'を渡していて、自動的に' int'に昇格します。 –
i1.im [i] [j] => i1.im [i] + jそしてストップキャスト! – Stargateur