C de kodlar döngü içinde çalışmıyor

nikoisbackx

Hectopat
Katılım
11 Aralık 2019
Mesajlar
109
Yer
Sakarya
Daha fazla  
Cinsiyet
Erkek
Meslek
Web & Mobile Developer
Merhaba,İşlemin 1 olması durumunda While döngüsü içerisinde char dizisine string girdirmeye çalışıyorum ancak kodları sanki okumuyor, döngü dışında yaptığımda çalışıyor sorun ne olabilir ?

C:
    setlocale(LC_ALL, "Turkish");
 
    int islem = 0;
 
    while (islem != 5){
 
        printf("\n----> Menü \n");
        printf("\n1.) Kaydet ");
         printf("\n2.) Oku ");
         printf("\n3.) Karşılaştır");
         printf("\n4.) Bul");
         printf("\n5.) Çıkış Yap");
       
       
         printf("\n\nİşlem Seçin => ");
        scanf("%d", &islem);
     
        if (islem == 1){
         
            char str[100];
            printf("\nPlease enter a string:\t");
            scanf("%[^\n]s", &str);
     
        } else if (islem == 2) {
            readFile("soru2.txt");
        }
        else if (islem == 3) {
            printf("3");
        }
        else if (islem == 4) {
            printf("4");
        }
        else if (islem == 5) {
            printf("\nÇıkış Yaptınız...");
            break;
     
        }  else {
            printf("Hatalı İşlem Tekrar Deneyin");
            continue;
        }
    }
 
     printf("İyi Günler..");
 
Son düzenleme:
1) Klasik konsol menülerinde [if - else if] yerine switch case kullanmanız daha iyi olur.

2)scanf yerine fgets kullanmayı deneyebilirsiniz.

3) readFile fonksiyonu C++ diye hatırlıyorum ama sizin geri kalan syntax'ınız C'den bir kontrol edin.

Sorununuz tahminimce scanf'in işini bitirdikten sonra buffer'ı temizlememesi ama yanılıyor olabilirim.
 
Kod:
scanf("%[^\n]s", &str);
şu satırdaki [^\n] ne işe yarıyor? onu yapmadan direkt %s yazınca çalıştı bende. str' yi de if dışında tanımlayınca daha sonra tekrar ulaşabildim.
bu arada bunu yazmak için switch case daha süper olur diye düşünüyorum.
 
Kod:
scanf("%[^\n]s", &str);
şu satırdaki [^\n] ne işe yarıyor? onu yapmadan direkt %s yazınca çalıştı bende. str' yi de if dışında tanımlayınca daha sonra tekrar ulaşabildim.
bu arada bunu yazmak için switch case daha süper olur diye düşünüyorum.
 
Neden while döngüsünü tercih ettiniz ki? Üstte arkadaşın dediği gibi switch-case kullanmanız daha uygun. While döngüsü kullanma amacınız sürekli programı tekrar ettirmek mi? Öyleyse goto kullanabilirsiniz.
 
1) Klasik konsol menülerinde [if - else if] yerine switch case kullanmanız daha iyi olur.

2)scanf yerine fgets kullanmayı deneyebilirsiniz.

3) readFile fonksiyonu C++ diye hatırlıyorum ama sizin geri kalan syntax'ınız C'den bir kontrol edin.

Sorununuz tahminimce scanf'in işini bitirdikten sonra buffer'ı temizlememesi ama yanılıyor olabilirim.
olmadı :/
%s yapınca boşluktan sonrasında sorun oluyor. bir metin girilmesi gerekiyor..
 
C++:
#include <iostream>
using namespace std;
int main()
{
    int sayimiz = 0;
    bool degisken = false;
    while (true)
    {
        if (degisken == false)
        {
            cout << "sayi girin 1-5" << endl;
            cin >> sayimiz;
            switch (sayimiz)
            {
            case 1:
                cout << "1 girildi" << endl;
                break;
            case 2:
                cout << "2 girildi" << endl;
                break;
            case 3:
                cout << "3 girildi" << endl;
                break;
            case 4:
                cout << "4 girildi" << endl;
                break;
            case 5:
                cout << "5 girildi" << endl;
                break;
            default:
                degisken = true;
                break;
            }
        }
        else
            break;
       
    }
    cout << "Programdan cikiliyor...";
}
Dostum böyle birşey denedim, biraz uzun yoldan yapılmıs gibi geldi belki daha iyisini yapan cıkar. C++ bilgim yok gibi daha kolay yolları vardır mutlaka...
 
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int main()
{
bool Is_Done = false;
int islem;

while(Is_Done == false)
{
puts("\nEnter something:");
scanf("%d",&islem);

switch(islem)
{
case 1:
puts("\n1");
break;

case 2:
puts("\n2");
break;

case 3:
puts("\n3");
break;

case 4:
puts("\n4");
break;

case 5:
puts("\n5");
break;

case 6:
puts("\nEOF");
Is_Done = true;
break;

default:
puts("\nHATA");
break;
}
}
}
 

Yeni konular

Geri
Yukarı