switch case yapısındaki hatam nerede?

Başlatan muhammet467, 08 Temmuz 2014 - 23:04:23

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

muhammet467

#include<stdio.h>
#include<conio.h>


int main()
{
char secim,ad[20],secim1;
int yas,kilo,uzak;

printf("Merhaba ben Karabasan senin adin nedir ?  \n"); scanf("%s",ad);

printf("Demek adin %s nerden geliyor adin?\n");  scanf("%d",&uzak);

printf("oooo bayagi uzaktan geliyormus :D \n "); printf("heheh\n");

printf("%s sana %sos diyebilir miyiim ? :D aasdfshfbadkfs\n\n",ad,ad);

printf("(evet:e/hayir:h/cikis:c\n)");scanf("%c",&secim1);
switch(secim1)
{
    case 'e':printf("yok ya vazegectim ben sana %s diyecem  \n\n",ad);break;
    case 'h':printf("iyi tamam %s os hehehe %s os \n\n",ad,ad);break;
    case 'c': break;
    default:printf("beni kandirmaya calisma dostum evet mii hayir mii ? \n\n");break;
    }

printf("ee nasilsin bakalim ? cokta umrumda ya hih  \n");
A:printf("(iyiyim:e/kotuyum:h/cikis:c)\n");

scanf("%c" ,&secim);
switch(secim)
{
    case 'e' :printf("oh oh masallah \n\n");break;
    case 'h':printf("hayirdir karadenizde gemilerin mi batti ? neyse sormadım say \n\n");break;
    case 'c': break;
    default:printf("beni kandirmaya calisma dostum evet mii hayir mii ? \n\n");goto A;
    }
    printf("Kac yasindasin bakiyim ? \n\n");scanf("%d" ,&yas);
    if(yas<=9||yas>65)
    {
        printf("dalga gecme kirarim kafani\n\n");
        }
       
        else if(yas>9&&yas<=25)
    {
        printf("Yasit sayiliriz sana kanka diyebilir miyiiim\n\n Neysee \n");
        }
         else if(yas>25&&yas<=42)
    {
        printf("Abim yapma gozunu seviyim kapa beni yaa kac yasına gelmissin \n\n ");
        }
        else if(yas>42&&yas<=65)
         {
        printf("Ohh yok artık bilgisayar kullanmayı nerde ogrendın dedee \n\n ");
        }
     printf("Kilon kac senin ? \n\n");scanf("%d" ,&kilo);
    if(kilo<=40)
    {
        printf("Ruzgarli havada disarida kalma mazallah :D \n\n");
        }
       
        else if(kilo>40&&kilo<=65)
    {
        printf("Biraz kilo al la o ne oyle kurdan gibi :D\n\n");
        }
         else if(kilo>65&&kilo<=80)
    {
        printf("Anan baban iyi bakmıs sana kocum benim git bi ellerinden op bence :D \n\n ");
        }
        else if(kilo>80&&kilo<=999)
         {
        printf("Olm yiyon yiyon sicmiyon mu sen :D \n\n ");
        }
        printf("Ayy ne komiklestim ben yine :D\t ");  printf("ehheheh \t ekohehkohh \n ");
   
   
getch(); 
}


kod bu arkadaslar karabasan exe diye bi program vardı onun benzerini kend bilgilerimle yazmaya calısıyorum.Siz de derleyince göreceksiniz . İsim istiyorum kullanıcıdan . isimdeki karakter sayısınca beni kandirmaya calisma dostum evet mii hayir mii ? ifadesini yazdırıyor. Sorunumu cozerbilir misiniz ? Nerede hata yapıyorum ?

ekremsenturk


7hr33l3t73r

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

muhammet467


7hr33l3t73r

Derleme hatasi aliyorsaniz.Asagidaki kodlari deneyebilirsiniz.

#include<stdio.h>
//#include<conio.h>


int main()
{
char secim,ad[20],secim1;
int yas,kilo,uzak;

printf("Merhaba ben Karabasan senin adin nedir ?  \n"); scanf("%s",ad);

printf("Demek adin %s nerden geliyor adin?\n");  scanf("%d",&uzak);

printf("oooo bayagi uzaktan geliyormus :D \n "); printf("heheh\n");

printf("%s sana %sos diyebilir miyiim ? :D aasdfshfbadkfs\n\n",ad,ad);

printf("(evet:e/hayir:h/cikis:c\n)");scanf("%c",&secim1);
switch(secim1)
{
    case 'e':printf("yok ya vazegectim ben sana %s diyecem  \n\n",ad);break;
    case 'h':printf("iyi tamam %s os hehehe %s os \n\n",ad,ad);break;
    case 'c': break;
    default:printf("beni kandirmaya calisma dostum evet mii hayir mii ? \n\n");break;
    }

printf("ee nasilsin bakalim ? cokta umrumda ya hih  \n");
A:printf("(iyiyim:e/kotuyum:h/cikis:c)\n");

scanf("%c" ,&secim);
switch(secim)
{
    case 'e' :printf("oh oh masallah \n\n");break;
    case 'h':printf("hayirdir karadenizde gemilerin mi batti ? neyse sormadım say \n\n");break;
    case 'c': break;
    default:printf("beni kandirmaya calisma dostum evet mii hayir mii ? \n\n");goto A;
    }
    printf("Kac yasindasin bakiyim ? \n\n");scanf("%d" ,&yas);
    if(yas<=9||yas>65)
    {
        printf("dalga gecme kirarim kafani\n\n");
        }
       
        else if(yas>9&&yas<=25)
    {
        printf("Yasit sayiliriz sana kanka diyebilir miyiiim\n\n Neysee \n");
        }
         else if(yas>25&&yas<=42)
    {
        printf("Abim yapma gozunu seviyim kapa beni yaa kac yasına gelmissin \n\n ");
        }
        else if(yas>42&&yas<=65)
         {
        printf("Ohh yok artık bilgisayar kullanmayı nerde ogrendın dedee \n\n ");
        }
     printf("Kilon kac senin ? \n\n");scanf("%d" ,&kilo);
    if(kilo<=40)
    {
        printf("Ruzgarli havada disarida kalma mazallah :D \n\n");
        }
       
        else if(kilo>40&&kilo<=65)
    {
        printf("Biraz kilo al la o ne oyle kurdan gibi :D\n\n");
        }
         else if(kilo>65&&kilo<=80)
    {
        printf("Anan baban iyi bakmıs sana kocum benim git bi ellerinden op bence :D \n\n ");
        }
        else if(kilo>80&&kilo<=999)
         {
        printf("Olm yiyon yiyon sicmiyon mu sen :D \n\n ");
        }
        printf("Ayy ne komiklestim ben yine :D\t ");  printf("ehheheh \t ekohehkohh \n ");
   
   
//getch(); 
}
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

muhammet467

Değişen bir şey olmadı malesef :(



[eklenti yönetici tarafından silindi]

ekremsenturk

#6
Windows'ta çalıştığını yazsana, yanlış ayrıntılara odaklanıyoruz.

Her "switch" için bir "case" diye biliyorum. Sen bir den fazla "case" kullanmışsın. Bir de veri türünde hata var sanırım. kendi adımı girince "null" olarak görünüyor.  (Ben yanılabilirim. C ile ilgilendiğim dönemde, programlamadan pek bir şey anlamazdım, yanlış hatırlıyor olabilirim)

muhammet467

#7
Pardon abi haklısın  .  Kusura bakmayın . Dediğim gibi sorun derleyici hatası değil . Algoritma hatası sanırım .


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 09 Temmuz 2014 - 01:44:00

switchte birden fazla case oluyor . Mantıgı secim yapması zaten . String olarak isim aldığımdan bi sorun veriyor. Hiç isim almadığım versiyonunda hata vermiyor :/

desperado

Çeşitli düzenlemeler yaptım ancak iki adet switch case yapısını aynı main bloğunda kullandığın için hangisine girileceğine karar veremiyor program. İstersen ayrı prosedürler içerisinde çağırabilirsin switch caseleri. NULL değer dönmesinin sebebi ise printf kısmında hangi değişkenin gösterileceğini yazmamışsın da ondan.
Uzun bir gece yolculuğu gibidir hayat uzunları yaksan da pek uzağı göremezsin.

Reverser

yeni bir fonksiyon ile ikinci switch case yapısını kullanmanız sorunu çözecektir. 

void fonksiyon(void) {
 //switch yapısı 
}

bu fonksiyonuda main içinden fonksiyon(); kullanımı ile çağırabilirsiniz bu şekilde goto tanımını kullanmanıza gerek kalmaz ve kod bloğunuz daha okunur bir hal almış olur :)

XFCE ROCKS !
Powered by Thunar & XFWM4



sem

String'i okuduktan sonra stdin tamponunda kalan çöp değerler nedeni ile sorun yaşadığınızı sanıyorum.

https://forum.ubuntu-tr.net/index.php?topic=17803.0

Bu başlıkta konuyu ve çözümünü detaylıca görebilirsiniz. Arayınca konuyu konuştuğumuz bir iki başlık daha bulabilirsiniz. Emin olmamakla beraber 

https://forum.ubuntu-tr.net/index.php?topic=21284.15

bağlantısı da alakalı olabilir.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

blackwidow

Merhaba

Programın switch ' den önceki scanf'lerde daha öncesindeki printlerden kaynaklı fazladan bir char okuyor.

Şöyle yapınca halloldu .

scanf("%c%c",&buff,&secim);

   
switch(secim){
.
.
.
}


Bunu iki switch case için de yapınca düzeliyor.

Ancak program 'c' seçildiğinde çıkış yapmıyor . Bunun için İnteger Return edebilir yada exit(0) kullanabilirsin.

Son olarak da Switch'in sonunda ki default da break; kullanmana gerek yok .

Kolay Gelsin

Pozitron

printf("Demek adin %s nerden geliyor adin?\n");  scanf("%d",&uzak);
Kısmında %s için ",ad" yazmamışsın ben de bunu ekleyeyim bari :)
To follow the path,look to the master,follow the master,walk with the master,see through the master,become the master.

-DıLgEş-

Kodu çok fazla uzatmışsınız kodu fonksiyonlar içine bölerek kullanmak yararınıza olacaktır. Böylelikle hatayı daha çabuk bulabilirsiniz.
Aşkın; gözü kör, kulağı sağır, dili tutuk, aklı kıttır..! Hayır yani bu halde nasıl herkesi madara ediyor onu çözemedim..

sem

".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?