Tarih: Sat Jul 02, 2005 12:25 pm Mesaj konusu: Windows hatası
Arkadaşlar yine başımın etini yiyen bir sorunla karşı karşıyayım.
Windows bir tülü bir dosyayı açamıyor!!!!
Kod:
#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
void main(int argc,char *argv[])
{
int bakiye;
int parola;
int girissayisi;
int islem;
int yatir;
int cek;
bakiye=100;
FILE *fp;
fp=fopen("data", "r+");
if (fp==NULL)
{
printf("Dosya acilamadi!\n");
getch();
exit(1);
}
printf("Hos geldiniz.\nGiris yapiniz:");
parola:
scanf("%d", &parola);
if (parola==92635)
goto giris;
else
{
printf("\nOyle bir parola yoktur:");
getch();
goto parola;
}
giris:
isslem:
printf("Merhaba!İslemleriniz asagidadir:\n");
printf("1:Bakiye\n");
printf("2:Para yatir\n");
printf("3:Para cek\n");
printf("4:Cikis\n");
scanf("%d", &islem);
switch (islem)
{
case 1:{
system("cls");
fscanf(fp,"%d", bakiye);
rewind(fp);
printf("Bakiyeniz:%d ytl", bakiye);
goto isslem;
}
case 2:{
printf("Kac YTL yatiracaksiniz:");
scanf("%d", yatir);
bakiye+=yatir;
fscanf(fp,"%d", bakiye);
rewind(fp);
printf("%d YTL yatirildi!");
goto isslem;
}
case 3:{
printf("Kaç YTL cekeceksiniz:");
scanf("%d", cek);
if (cek<bakiye)
{
printf("\nHesabınızda o kadar para yok!\n");
goto isslem;
}
bakiye-=cek;
fscanf(fp,"%d", bakiye);
rewind(fp);
}
}
}
Bazı yaptığım programlarda dosyayı ve Opengl pencerelerini açmıyor. Bakiyeye gelince (bakiyenin dosyadan okunduğu yerde) bir hata veriyor:"dosya.exe has encountered a problem and needs to close.We are sorry for the inconvenience."Problem nerde?Uğraşıyom uğraşıyom KAFAYI YİYCEM!!!
Aynı hata şurdada oluyordu:
Kod:
#include <gl/glut.h>
#include <stdio.h>
#include <windows.h>
void ucgenScene(void)
{
int secim;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex3f(0.0f,1.0f,0.0f);
glVertex3f(-1.0f,-1.0f,0.0f);
glVertex3f(1.0f,-1.0f,0.0f);
glEnd();
glPopMatrix();
glutSwapBuffers();
printf("Sekil Cizdirme Programi\n");
printf("-------------------------------------------------------------\n");
printf("Hangi sekli çizmek istiyorsunuz?\n");
printf("1)Ucgen 2)Kare 3)Dikdortgen 4)Daire");
printf("\nAcilan pencerede;\nRenkleri degistirmek icin:F1,F2,F3 ve F4 tuşlarini kullanin.Saga sola evirmek cevirmek icin ok tuslarini kullanin.\n");
scanf("%d", secim);
}
void processSpecialKeys(int key,int x,int y)
{
static float derecee=0.0f;
switch(key) {
case GLUT_KEY_F1 :
glColor3f(1.0f,0.0f,0.0f);
break;
case GLUT_KEY_F2 :
glColor3f(0.0f,1.0f,0.0f);
break;
case GLUT_KEY_F3 :
glColor3f(0.0f,0.0f,1.0f);
break;
case GLUT_KEY_F4 :
glColor3f(1.0f,1.0f,1.0f);
case GLUT_KEY_RIGHT:
glRotatef(derecee,0.0f,1.0f,0.0f);
case GLUT_KEY_LEFT:
glRotatef(derecee,0.0f,-1.0f,0.0f);
}
}
void karecizScene(void)
{
glBegin(GL_QUADS);
glVertex3f(1.0f,1.0f,0.0f);
glVertex3f(-1.0f,-1.0f,0.0f);
glVertex3f(1.0f,-1.0f,0.0f);
glVertex3f(-1.0f,1.0f,0.0f);
glEnd();
glutSwapBuffers();
}
void main(int argc,char**argv)
{
int secim;
/* */
printf("Sekil Cizdirme Programi\n");
printf("-------------------------------------------------------------\n");
printf("Hangi sekli çizmek istiyorsunuz?\n");
printf("1)Ucgen 2)Kare 3)Dikdortgen 4)Daire");
printf("\nAcilan pencerede;\nRenkleri degistirmek icin:F1,F2,F3 ve F4 tuşlarini kullanin.Saga sola evirmek cevirmek icin ok tuslarini kullanin.\n");
scanf("%d", secim);
switch (secim)
{
case 1:
{
glutDisplayFunc(ucgenScene);
glutSpecialFunc(processSpecialKeys);
glutMainLoop();
}
case 2:
{
glutDisplayFunc(karecizScene);
glutSpecialFunc(processSpecialKeys);
glutMainLoop();
}
}
}
Ne denediysem olmadı!!!
CEVAPLARINIZ İÇİN TEŞEKKÜRLER!
Ha bu arada kodları çalmayın
Kayıt: Feb 26, 2003 Mesajlar: 1258 Nereden: Dünya.Türkiye(54)
Tarih: Sat Jul 02, 2005 2:40 pm Mesaj konusu:
Önce ben soru sorayım:
Açtığın dosyayı kapamayı düşünmüyormusun? Tamam dosya okumada kapatmasanda olur ama yazma işlemlerinde mutlaka kapat, yoksa HDD'de veri kayıpları yaşarsın...
Dosyanı text olarak açıyorsun sanırım, neden peki uzanı koymuyorsun? *.txt yada *.ini gibi?
Hangi aracı kullanıyorsun?
Şimdide yorumlarım: Exe, okunmak isteyen dosyadan bir adım ötesinde ise: ../ gibi geride kalan dosyaları okuyacaktır fakat sen direk kendin çalıştırıyorsan, *.exe'i data denen dosyanın yanına taşıman gerekecek, yada okuma işlemini "../data" diye yapacaksın...
Normal file dosyası açıyorum.Walla hiç bilmiyordum nasıl txt açılacağını çok saol fakat dediklerini yaptım yine de olmadı...Derleyicim Microsoft Visual c++.Cevabın için teşekkürler.
Sizi de çok yordum galiba...
Kayıt: Jun 10, 2004 Mesajlar: 290 Nereden: İstanbul // Üsküdar
Tarih: Sun Jul 03, 2005 11:29 am Mesaj konusu:
fopen("data"...
demişsin ya nomax'in dediği şu bu data dosyasının bir uzantısı yokmudur? yani bir dat bir txt bir blabla falanı yokmudur. Yoksa orada bir problem yok o zaman ben sadece öyle düşündüm başka bir nokta dikkatimi çekerse belirtirim. iyi çalışmalar
Yaw arkadaşlar çıldırcam nerdeyse!!!
Hani bir zamanlar Opengl'de nasıl 3ds formatı yükleyecem diye sormuştum ya.İşte orda da siz bana sitenin verdiği 3ds tutorial'ından faydalan demiştiniz ya.İşte dedğinizi yapmıştım ve program çalışmıştı.Şimdi programa birşeyler ekledim fakat compile etmedi.Sonra tekrar sildim yazdıklarımı compile+build ettim acaba çalışıyormu diye kontrol ederken bir baktım yine o hatayı verdi."ana.exe has encountered a problem and needs to close.We are sorry for the inconvenience."
Bu bilgisayardan mı kaynaklanıyor?Yaptığım bazı programlarda da (bkz:Üst) aynı hatayı veriyor.
Cevaplarınız için şimdiden sağolun...
Not:Bu arada kimseye sen yanlış söyledin falan demiyorum(zaten öyle bişede olmadı ) tutorial'da doğru fakat ya ben de bişey var ya da bilgisayarda.
Kayıt: Jun 10, 2004 Mesajlar: 290 Nereden: İstanbul // Üsküdar
Tarih: Sun Jul 03, 2005 11:41 am Mesaj konusu:
özür diliyorum md-c demiş noma değil nereden geldiyse aklıma . Az önce onnun konusuna bakıyordum oradan kalmış herhalde neyse çalıştırdım programı sorunsuz bir şekilde ufak bir run-time error'u var ama düzeltmesi çok kolay cek değişkenini bir değerle başlatmadan kullanmışsın olay bu gelelim senin problemine exe'yi vc++'daki run tuşuyla çalıştırıyorsan data dosyasını proje dosyasının olduğu dizine koymalısın ve uzantısı olmamalı yani unix mantığı . Bak şimdi nasıl uzantısız bir dosya yapacaksın önce proje dosyasının olduğu dizine bir metin dosyası oluştur ve bir isim ver. Daha sonra sonundaki .txt'yi sil. Eğer uzantıları göremiyorsan klasördeyken sırasıyla
Araçlar -> Klasör Seçenekleri -> (Tablardan) Görünüm oradaki listeden de bilinen dosya türleri için uzantıları gizle şıkkının yanındaki tiki kaldır uygula tamam de ve sonra bahsettiğim .txt silme olayını yap. ve programı VC++ içinden çalıştır mutlaka çalışacaktır çünkü bende çalıştı . Eğer programı debug ya da release klasöründen çalıştırıyorsan data dosyasının hiçbir uzantısı olmadan (.txt falan olmadan) çalıştırdığın exe ile aynı dizinde olmasına dikkat et. Eğer herşeyi doğru yaparsan mutlaka çalışacaktır...
Cevabın için çok teşekkürler Madprogrammer dediklerini de denedim fakat maalesef çalışmadı.Zaten ben başka bir programla w+ biçiminde data isimli bir dosya yarattığım için uzantısız dosya yaratmak sorun olmadı. Dediğim gibi normalde çalışması gereken ve diğer bilgisayarlarda çalışan bir programın benim bilgisayarımda çalışmaması bilgisayardan kaynaklanıyor olabilir.Fakat bunun da olamayacığını anladım daha demin arkadaaşın evinde denedik ve onda da aynı hata.Sorunu hala bulamadım.
Programda yatır'a geliyorum "kaç ytl yatıraksınız" diye soruyor ve bende değeri girince dosyayı açıp bakiyeden kesemiyor.Çok garip bir sorun.Bir de daha demin 3ds ile ilgili bir sorunum var o daha da garip.Cevabın için tekrar saol.Canın sağolsun. Çalışmalarında başarılar.
Not:3ds programına birşey eklemeyi untmuşum.Programı Microsoft Visual c++'da execute diyince program normal çalışıyor ama normal exe'den çalıştırınca çalışmıyor.Cevaplarıız için yeniden teşekkürler ve sağolun.
Kayıt: Mar 06, 2004 Mesajlar: 351 Nereden: Eskişehir
Tarih: Sun Jul 03, 2005 1:22 pm Mesaj konusu:
vallahi programın ne yapmaya çalıştığını pek anlayamadım doğrusu ama
scanf("%d", yatir);
"yatir" değişkeninin int türünde olduğunu düşünürsek bu böyle olmaz.
scanf("%d", &yatir);
şeklinde olması gerekir. Yani C'deki stream kayit fonksiyonlarinin ilgilendigi sey adreslerdir, degiskenlerin degeri degil. Eger elindeki sey bir pointer ise onu scanf, fscanf gibi fonksiyonlara direk gecirebilirsin.
Ayrica bir elestiri. Prosedurel zamandan once kalma bir deyim olan goto'yu kullanmissin. Bence dili nereden ogreniyorsan kaynagini degistir.
Bu forumda yeni konular açamazsınız Bu forumdaki mesajlara cevap veremezsiniz Bu forumdaki mesajlarınızı değiştiremezsiniz Bu forumdaki mesajlarınızı silemezsiniz Bu forumdaki anketlerde oy kullanamazsınız