[Çözüldü] C derlemede sorun

Başlatan ktumit, 05 Mart 2012 - 14:16:17

« önceki - sonraki »

0 Üyeler ve 5 Ziyaretçi konuyu incelemekte.

ktumit

Merhaba arkadaşlar ben basit bir c dilinde kodlama sıkıntı yaşadım, linuxa yeni başladığım için sürekli bu forumdan faydalanmak istiyorum, basit bir alan hesabi programı yazdım... windowsda dev++ de bi sorun yaşamadım ama linuxda derlemede sıkıntı oldu buyrun sorun aşağıda... kodumda en altta..

Aldığım hata;
alanhesabi.c:2:19: fatal error: conio.h: No such file or directory
compilation terminated.


Kodum;
#include <stdio.h>
#include <conio.h>
#include <math.h>

int main () {

int secim, d1,d2,d3;
float pi=3.14159;
printf("Alanini hesaplamak istediginiz geometrik seklin numarasini seciniz : ");
printf("Ucgen - 1\n");
printf("Daire - 2\n");
printf("Kare  - 3\n");
printf("Silindir - 4 \n");
scanf("%d",&secim);

if(secim==1)
{
printf("ucgenin 1. kenarini giriniz  : ");
scanf("%d",&d1);

printf("ucgenin 2. kenarini giriniz  : ");
scanf("%d",&d2);

printf("ucgenin acisini giriniz  : ");
scanf("%d",&d3);

printf("Ucgenin alani : %f dir",1/2*d1*d2*sin(d3));
}

else if(secim==2)
{
printf("dairenin yaricapini giriniz : ");
scanf("%d",&d1);

printf("Dairenin alani %f dir.",pi*r*r);
}

else if(secim==3)
{printf("Karenin kenarini giriniz : ");
scanf("%d",&d1);
printf("Karenin alani %d dir. ",d1*d1);
}

else if(secim==4)
{
printf("Silindirin taban yaricapini giriniz : ");
scanf("%d",&d1);
printf("Silindirin yuksekligini giriniz :  ");
scanf("%d",&d2);

printf("Silindirin alani : ",2*pi*d1*d2+2*pi*d1*d1);

}

getch();
return 0;   
}

ironic

Merhaba conio.h microsoft taraflı bir başlık dosyasıymış. Linux tarafında curses.h yerine kullanılabiliyormuş.

curses.h için aşağıdaki komutla gerekli paketi kurun.



sudo apt-get install ncurses-dev


C dosyasında da conio.h yerine curses.h yazın.

Derlerken de aşağıdaki şekilde komutu girin.


gcc c_dosyasi.c -o c_dosyası -l ncurses


Kaynak: https://godhc.wordpress.com/2011/01/16/include-conio-h-linux-ubuntu/

ktumit

dediklerinizi yaptım fakat bu seferde bu şekilde bir hata verdi.

ktumit@ktumit:~$ cd Masaüstü
ktumit@ktumit:~/Masaüstü$ gcc c_alanhesabi.c -o c_alanhesabi -l ncurses
gcc: error: c_alanhesabi.c: No such file or directory



ironic

komutu c kaynak dosyasının bulunduğu dizinde verin. Alınan hata, c_alanhesabi.c dosyasının masaüstünde olmadığını söylüyor.

ktumit

kusura bakmayın ama anladım.. cd Masaüstü diyip masaüstüne geçiyorum sonra gcc yapıp dediğiniz gibi derliyorum nerde yanlış yapıyorum acaba?

ironic

Masaüstündeki kaynak dosyanın adını doğru girdiğinizden eminseniz açıkcası alınan hatadan başka bir sorun çıkaramadım ben.

ktumit

doğru olduğuna eminim hatta buyurun sizde bakın


heartsmagic

@ktumit, nasıl eminsin? Derleme yaparken kullandığın dosya ismi "c_alanhesabi.c" fakat Masaüstü dizininde bulunan dosyalar şunlar: "alanhesabi.c" ve "merhaba.c"
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

ktumit

hocam merhaba.c benim çalıştığım dosyam değil alanhesabinda sorun yaşıyorum, bi yanlış mı yaptım anlamadım k.bakmayın

travego0403

#9
conio.h içerisinde tanımlı olan getch() fonksiyonunu sadece ekranı bekletmek için kullanmışsın gördüğüm kadarıyla. Linuxta konsoldan derleyip, konsolda çalıştırdığınız zaman programınız işini bitirip konsolu kapatmayacaktır. Bu yüzden bu başlık dosyasını ve getch() fonksiyonunu kullanmaya gerek yoktur.

getch() fonksiyonu standart girdiden karakter okur. Eğer bu özelliğini kullanmak istiyorsanız farklı bir yöntem veya ncurses kütüphanesi içindeki işlevlerden yararlanabilirsiniz.

Kaldı ki bir çok C++ uzmanı bu şekilde getch() kullanımının yanlış olduğunu savunuyor.

Ek: Kaynak kodunuzun dosya ismi ile derleyiciye bildirdiğiniz isim farklı.
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

heartsmagic

Alıntı yapılan: ktumit - 05 Mart 2012 - 15:45:49
hocam merhaba.c benim çalıştığım dosyam değil alanhesabinda sorun yaşıyorum, bi yanlış mı yaptım anlamadım k.bakmayın

Söylendiği üzere dosya ismi neyse derleyicide de o şekilde kullanman lazım.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

ktumit

Alıntı yapılan: heartsmagic - 05 Mart 2012 - 18:17:20
Söylendiği üzere dosya ismi neyse derleyicide de o şekilde kullanman lazım.

affınıza sığınarak biraz daha açık olabilir misiniz. Ben şuan alanhesabi.c adlı dosyamı derlemek istiyorum ve konsola bulunduğu dizine geçip aynen şu komutu veriyorum

gcc c_alanhesabi.c -o c_alanhesabi -l ncurses

burada yanlış olan nedir bir türlü anlamadım.

Birde gerçekten kusura bakmayın linux kitapları okuyup linux becerimi geliştirmeyi amaçlıyorum; forumunda bana yardımı dokunacağını düşündüğüm için karşılaştığım sorunları yazıyorum ne kadar basit olsada ama gerçekten daha bu işin başındayım, anlamakta güçlük çekiyorum yardımlarınızada bilhassa çok teşekkür ederim.

if

@ktumit, eğer bir şeyler öğrenmek istiyorsanız sorununuz basit de olsa zor da, bunun için foruma konu açmaktansa, sorunların üzerine gidip kendiniz çözmeyi deneyiniz.

find ~/ -name c_alanhesabi ne diyor?

ktumit

Alıntı yapılan: if - 05 Mart 2012 - 22:11:49
@ktumit, eğer bir şeyler öğrenmek istiyorsanız sorununuz basit de olsa zor da, bunun için foruma konu açmaktansa, sorunların üzerine gidip kendiniz çözmeyi deneyiniz.

find ~/ -name c_alanhesabi ne diyor?

boş bi satıra geçiyor hocam hiçbir işlem gerçekleştirmedi

if

@ktumit, derlemeye çalıştığınız dosya nerede?

ktumit

masaüstünde buyurun

ktumit@ktumit:~$ cd Masaüstü
ktumit@ktumit:~/Masaüstü$ ls -l
total 36
-rw-rw-r-- 1 ktumit ktumit 1024 2012-03-05 14:34 alanhesabi.c
-rw-rw-r-- 1 ktumit ktumit 1023 2012-03-05 14:16 alanhesabi.c~
-rw-rw-r-- 1 ktumit ktumit 1377 2012-03-05 15:40 C defterim
-rw-rw-r-- 1 ktumit ktumit 1345 2012-03-05 14:53 C defterim~
drwx------ 9 ktumit ktumit 4096 2012-03-03 18:38 eclipse
-rw-rw-r-- 1 ktumit ktumit   21 2012-02-26 01:14 hello~
-rw-rw-r-- 1 ktumit ktumit 1030 2012-03-03 19:09 hello.c~
-rw-rw-r-- 1 ktumit ktumit  256 2012-03-04 16:40 helloc.c~
-rw-rw-r-- 1 ktumit ktumit  243 2012-03-04 17:01 merhaba.c~
-rw-rw-r-- 1 ktumit ktumit    0 2012-03-03 18:10 Untitled Document~
ktumit@ktumit:~/Masaüstü$

if

@ktumit, cd ~/Masaüstü
gcc alanhesabi.c -o alanhesabi -l ncurses
komutunu uyguladığınızda eçbirim çıktı vermeden alt satıra geçiyorsa derleme yapılmış demektir.

ktumit

bu sefer farklı bir hata verdi hocam

ktumit@ktumit:~$ cd ~/Masaüstü
ktumit@ktumit:~/Masaüstü$ gcc alanhesabi.c -o alanhesabi -l ncurses
alanhesabi.c: In function 'main':
alanhesabi.c:27:1: warning: format '%f' expects argument of type 'double', but argument 2 has type 'int' [-Wformat]
alanhesabi.c:35:36: error: 'r' undeclared (first use in this function)
alanhesabi.c:35:36: note: each undeclared identifier is reported only once for each function it appears in
ktumit@ktumit:~/Masaüstü$

travego0403

İlk baştaki yaptığın hata alanhesabi.c adlı kaynak dosyan var ama sen derleyiciye c_alanhesabi.c adlı dosyayı derletmeye çalışıyorsun. Bu yüzden hata alıyordun. Şimdi ise derleyici kaynak kod içerisindeki hataları söylüyor. Hatayı bulabilmek için kaynak kodu görmek lazım.
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

ktumit

buyurun hocam kaynak kod burada.

#include <stdio.h>
#include <curses.h>
#include <math.h>

int main () {

int secim, d1,d2,d3;
float pi=3.14159;
printf("Alanini hesaplamak istediginiz geometrik seklin numarasini seciniz : ");
printf("Ucgen - 1\n");
printf("Daire - 2\n");
printf("Kare  - 3\n");
printf("Silindir - 4 \n");
scanf("%d",&secim);

if(secim==1)
{
printf("ucgenin 1. kenarini giriniz  : ");
scanf("%d",&d1);

printf("ucgenin 2. kenarini giriniz  : ");
scanf("%d",&d2);

printf("ucgenin acisini giriniz  : ");
scanf("%d",&d3);

printf("Ucgenin alani : %f dir",1/2*d1*d2);
}

else if(secim==2)
{
printf("dairenin yaricapini giriniz : ");
scanf("%d",&d1);

printf("Dairenin alani %f dir.",pi*r*r);
}

else if(secim==3)
{printf("Karenin kenarini giriniz : ");
scanf("%d",&d1);
printf("Karenin alani %d dir. ",d1*d1);
}

else if(secim==4)
{
printf("Silindirin taban yaricapini giriniz : ");
scanf("%d",&d1);
printf("Silindirin yuksekligini giriniz :  ");
scanf("%d",&d2);

printf("Silindirin alani : ",2*pi*d1*d2+2*pi*d1*d1);

}

getch();
return 0;
}

travego0403

Çalışan hali aşağıdaki gibidir. Düzelttiğim yerler.
-printf() fonksiyonunda hesabı yapıyorsun, sonuç double türünden olduğu için %d kullanman gerkir.Tip dönüşüm sorunu
-Dairenin alanı hesaplarken d1 değişkeni yerine r değişkeni kullanmışsın. r daha önce tanımlı olmadığı için aldığın hata.
-Yukarıdada belirttiğim gibi getch() fonksiyonunu kullanman gerekmiyor.
#include <stdio.h>
#include <curses.h>
#include <math.h>

int main () {

int secim, d1,d2,d3;
float pi=3.14159;
printf("Alanini hesaplamak istediginiz geometrik seklin numarasini seciniz : ");
printf("Ucgen - 1\n");
printf("Daire - 2\n");
printf("Kare  - 3\n");
printf("Silindir - 4 \n");
scanf("%d",&secim);

if(secim==1)
{
printf("ucgenin 1. kenarini giriniz  : ");
scanf("%d",&d1);

printf("ucgenin 2. kenarini giriniz  : ");
scanf("%d",&d2);

printf("ucgenin acisini giriniz  : ");
scanf("%d",&d3);

printf("Ucgenin alani : %d dir",1/2*d1*d2);
}

else if(secim==2)
{
printf("dairenin yaricapini giriniz : ");
scanf("%d",&d1);

printf("Dairenin alani %f dir.",pi*d1*d1);
}

else if(secim==3)
{
printf("Karenin kenarini giriniz : ");
scanf("%d",&d1);
printf("Karenin alani %d dir. ",d1*d1);
}

else if(secim==4)
{
printf("Silindirin taban yaricapini giriniz : ");
scanf("%d",&d1);
printf("Silindirin yuksekligini giriniz :  ");
scanf("%d",&d2);

printf("Silindirin alani : ",2*pi*d1*d2+2*pi*d1*d1);

}


return 0;
}
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

ktumit

@travego0403 hocam gerçekten çok çok teşekkür ederim derleme sorunum vardı fakat baya birşey öğrendim sayenizde bundan sonra bu tecrübeyle dikkat edeceğim. Konu çözüldü herkese ilgisi için minnettarım bu forumu seviyorum :) :)

travego0403

Sorununuz çözüldü ise Çözüldü etiketi eklerseniz Forum tayfasını sevindirirsiniz. :)
http://forum.ubuntu-tr.net/index.php?topic=31789.0
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman