[Çözüldü] Ne Hatası Alıyorum?(sizeof fonksiyonu C dili)

Başlatan harunbas141, 23 Ağustos 2016 - 14:42:25

« önceki - sonraki »

0 Üyeler ve 3 Ziyaretçi konuyu incelemekte.

harunbas141


#include<stdio.h>
int main() {
int a=2;
float b=2;
char c[3]="can";
double d=2;
printf("\n a nin uzunlugu = %d",sizeof(a));
printf("\n a nin uzunlugu = %d",sizeof(a));
printf("\n b nin uzunlugu = %f",sizeof(b));
printf("\n c nin uzunlugu = %c",sizeof(c));
printf("\n d nin uzunlugu = %f",sizeof(d));
return 0;}




deneme1.c: In function 'main':
deneme1.c:7:8: warning: format '%d' expects argument of type 'int', but argument 2 has type 'long unsigned int' [-Wformat=]
printf("\n a nin uzunlugu = %d",sizeof(a));
        ^
deneme1.c:8:8: warning: format '%d' expects argument of type 'int', but argument 2 has type 'long unsigned int' [-Wformat=]
printf("\n a nin uzunlugu = %d",sizeof(a));
        ^
deneme1.c:9:8: warning: format '%f' expects argument of type 'double', but argument 2 has type 'long unsigned int' [-Wformat=]
printf("\n b nin uzunlugu = %f",sizeof(b));
        ^
deneme1.c:10:8: warning: format '%c' expects argument of type 'int', but argument 2 has type 'long unsigned int' [-Wformat=]
printf("\n c nin uzunlugu = %c",sizeof(c));
        ^
deneme1.c:11:8: warning: format '%f' expects argument of type 'double', but argument 2 has type 'long unsigned int' [-Wformat=]
printf("\n d nin uzunlugu = %f",sizeof(d));



hatam ne anlayamadım arkadaşlar. :'(

karboran

sizeof int dönderiyor sanırsam. C ile aram çok yok ama şu şekilde hata almadım ben.
#include<stdio.h>
int main() {
int a=2;
char c[3]="can";
int l1 = sizeof(a);
int l2 = sizeof(c);
printf("\n a nin uzunlugu = %d",l1);
printf("\n c nin uzunlugu = %d",l2);
return 0;}
Kabin basıncı düştü motorlarda arıza !
Vakit süratle aksın hakimiyet kur nabıza !
İçinden nasıl geldiyse yaz anlat herşeyi ,
Bu mektup varmıcak hayalini kurduğun kıza !

mt

#2

unsigned int a=2;
float b=2;
char c[3]="can";
double d=2;
printf("\n a nin uzunlugu =%d",sizeof(a));
printf("\n b nin uzunlugu =%d",sizeof(b));
printf("\n c nin uzunlugu =%d",sizeof(c));
printf("\n d nin uzunlugu =%d",sizeof(d));

karboran

Alıntı yapılan: mt - 23 Ağustos 2016 - 15:08:31

unsigned int a=2;
float b=2;
unsigned char c[3]="can";
double d=2;
printf("\n a nin uzunlugu =%d",sizeof(a));
printf("\n b nin uzunlugu =%d",sizeof(b));
printf("\n c nin uzunlugu =%d",sizeof(c));
printf("\n d nin uzunlugu =%d",sizeof(d));

Hata veriyor.
karbo@ktp ~ $ gcc test.c
test.c: In function 'main':
test.c:8:8: warning: format '%d' expects argument of type 'int', but argument 2 has type 'long unsigned int' [-Wformat=]
printf("\n a nin uzunlugu =%d",sizeof(a));
        ^
test.c:9:8: warning: format '%d' expects argument of type 'int', but argument 2 has type 'long unsigned int' [-Wformat=]
printf("\n b nin uzunlugu =%d",sizeof(b));
        ^
test.c:10:8: warning: format '%d' expects argument of type 'int', but argument 2 has type 'long unsigned int' [-Wformat=]
printf("\n c nin uzunlugu =%d",sizeof(c));
        ^
test.c:11:8: warning: format '%d' expects argument of type 'int', but argument 2 has type 'long unsigned int' [-Wformat=]
printf("\n d nin uzunlugu =%d",sizeof(d));
Kabin basıncı düştü motorlarda arıza !
Vakit süratle aksın hakimiyet kur nabıza !
İçinden nasıl geldiyse yaz anlat herşeyi ,
Bu mektup varmıcak hayalini kurduğun kıza !

7hr33l3t73r

warning: format '%d' expects argument of type 'int', , but argument 2 has type 'long unsigned int' [-Wformat=]
printf("\n a nin uzunlugu =%ld",sizeof(a));
        ...
        ...

Hata degil. Uyari verilmis.
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

harunbas141


mt

Unsigned --> pozitif sayılar
signed --> negatif ve pozitif sayıları kapsar

Uyarı bu yüzden olabilir.

harunbas141


#include<stdio.h>
int main() {
int a=2;
float b=2;
char c[3]="can";
int l1 = sizeof(a);
int l2 = sizeof(c);
float l3 = sizeof(b);
printf("\n a nin uzunlugu = %d",l1);
printf("\n c nin uzunlugu = %d",l2);
printf("\n b nin uzunlugu = %f" ,l3);
return 0;}



#include<stdio.h>
int main() {
int a=2;
float b=2;
char c[3]="can";
double d=2;
printf("\n a nin uzunlugu = %ld",sizeof(a));
printf("\n b nin uzunlugu = %f",sizeof(b));
printf("\n c nin uzunlugu = %c",sizeof(c));
printf("\n d nin uzunlugu = %f",sizeof(d));
return 0;}


peki bu iki kod arasındaki fark nedir? birinci çalışıyor ama ikincisi hata veriyor.

TheSpace

#8
sizeof byte değerini verir. Ve int türünde verdiği için ilk önce %f %c falan onları %d yapmanız gerekli. Onun haricinde int double gibi değerlerin zaten belirli bir değeri olduğundan a=3 değil de int a diye yazıp bırakılmalı. Ayrıyetten can değerinde de ya canı yazmayın yada canı yazıcaksanız dizinin içindeki 3ü silin.

Amenofis

Bi kere sizeof fonksiyon değil operator, yani sadece derleme anında işlem görür.

İkincisi sizeof her zaman tamsayı döndürür. Yani dönen sayıyı float ya da double değişkene atmak hatadır. Sonucu saklayacaksan int kullan. printf ile yazdıracaksan herhangi bir tamsayı belirteci uyar, ama "%lu" printf fonksiyonunu daha memnun eder.

Son olarak örnek koddaki en kritik hata şu. char c[3]="can";

TheSpace


#include <stdio.h>

int main(){

   int    i;              /* bir tamsayı */
   int    dizi[5];        /* 5 elemanlı bir tamsayı dizi */

   double d;              /* bir gercel sayı */
   double mizan[6];       /* 6 elemanlı bir gercel dizi */

   char   c;              /* tek bir karakter */
   char   str[] = "masa"; /* bir karakter topluluğu */


   printf("sizeof(int)   = %d\n",sizeof(int));
   printf("sizeof(i)     = %d\n",sizeof(i));
   printf("sizeof(dizi)  = %d\n\n",sizeof(dizi));

   printf("sizeof(double)= %d\n",sizeof(double));
   printf("sizeof(d)     = %d\n",sizeof(d));
   printf("sizeof(mizan) = %d\n\n",sizeof(mizan));

   printf("sizeof(char)  = %d\n",sizeof(char));
   printf("sizeof(c)     = %d\n",sizeof(c));
   printf("sizeof(str)   = %d\n",sizeof(str));

return 0;
}

ÇIKTI


sizeof(int)   = 4
sizeof(i)     = 4
sizeof(dizi)  = 20

sizeof(double)= 8
sizeof(d)     = 8
sizeof(mizan) = 48

sizeof(char)  = 1
sizeof(c)     = 1
sizeof(str)   = 5


Şu örneği incelerseniz yardımcı olabilir size.