Çözüldü C kodlarını döngü halinde çalıştırma

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Deqarnieux

Hectopat
Katılım
11 Ocak 2021
Mesajlar
149
Çözümler
1
Daha fazla  
Cinsiyet
Erkek
Merhaba. Yazdığım kodda işlemlerin sonunda kodu başa alarak işlemleri tekrar etmesini istiyorum ama bir türlü beceremedim.

Goto kullanmadan, değer döndüren bir fonksiyon ile yapmam lazım.

Kod:
#include <stdio.h>





int my_strlen(char s1[])

{

int a=0;

int b=0;

for (a=0; s1[a]!= '\0' ;++a)

{

    b++;

}

   return b; 

}





char* my_strcpy(char s1[], char s2[])

{

    int a=0;

    for(;a<my_strlen(s1);++a)

    {

        s1[a]=s2[a];

              

    }

    return s1;

}





int my_strcmp(char s1[],char s2[])

{

    int a=0;

    int b;

    if(my_strlen(s1)!=my_strlen(s2))

    {

        return -1;

    }

    else

    {   

        for(;a<my_strlen(s1);++a)

        {

            if(s1[a]==s2[a])

            {

                b=0;       

            }

            else

            {

                return -1;

            }

        }

        return b;

    }

}





char* my_strcat(char s1[],char s2[])

{

    int a;

    int b=my_strlen(s1);

    for(a=0;a<my_strlen(s2);++a)

    {

        s1=s2[a];

        b+=1;

    }

    return s1;

}



char* my_strncat(char s1[],char s2[],int n)

{

    int a;

    int b=my_strlen(s2);

    for(a=0;a!=n;++a)

    {

        s2=s1[a];

        b+=1;

    }

    return s2;

}



void son(){



printf("Islem sonlanmistir.\n");

}





int main()

{

    char s1[]= "anime";

    char s2[]= "kitap";

    int f;

    int k;

    int p;

    

    

    



    

    printf("1-Dizilerin kac harften olustugunu gosterir.\n");

    printf("2-s2 dizisini s1 dizisine kopyalar.\n");

    printf("3-s1 dizisi ile s2 dizisini karsilastirir.\n");

    printf("4-s2 dizisini s1 dizininin sonuna ekler.\n");

    printf("5-s1 dizisini 5 harften fazla olmayacak sekilde s2 dizisine ekler.\n");

    printf("istediginiz islemi seciniz.\n");

    

    scanf("%d",&f);

    if (f==1)

    {

        goto bir;

    }

    else if (f==2)

    {

        goto iki;

    }

    else if (f==3)

    {

        goto uc;

    }

    else if (f==4)

    {

        goto dort;

    }

    else

    {

        goto bes;

    }

    

    bir:

        printf("1. dizide %d tane harf var.\n2. dizide %d tane harf var.\n",my_strlen(s1),my_strlen(s2));

        

         printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");

         scanf("%d",&p);

         if (p==1)

         {

        

        }

         else if (p==2)

         {

             son();

             return 0;

         }

    

        

    iki:

        my_strcpy(s1,s2);

        printf("1. dizi = %s\n",s1);

        

        printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");

         scanf("%d",&p);

         if (p==1)

         {

        

        }

         else if (p==2)

         {

             son();

             return 0;

         }

    



        

    uc:

         if(my_strcmp(s1,s2)==0)

         {

              printf("Islem sonucu %d diziler esittir.\n",my_strcmp(s1,s2));   

            }

         else

         {

              printf("Islem sonucu %d diziler farklidir.\n",my_strcmp(s1,s2));

         }

        

         printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");

         scanf("%d",&p);

         if (p==1)

         {

        

        }

         else if (p==2)

         {

             son();

             return 0;

         }

        

    dort:

          my_strcat(s1,s2);

          printf("1. Dizi = %s\n",s1);

          

          printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");

         scanf("%d",&p);

         if (p==1)

         {

        

        }

         else if (p==2)

         {

             son();

             return 0;

         }

          

    bes:

          

          printf("1. Dizinin kac harfi s2 Dizisine eklensin.\n5 harfi gecemez.\n");

          scanf("%d",&k);

          my_strncat(s1,s2,k);

          printf("2. Dizi = %s\n",s2);   

          

          printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");

         scanf("%d",&p);

         if (p==1)

         {

        

        }

         else if (p==2)

         {

             son();

             return 0;

         }   

            

    return 0;

}
 
Son düzenleyen: Moderatör:
Çözüm
Değişkenleri her zaman ilklendir.
Değişkenlere güzel isim var. f, k ve p anlamsız. 2 haftaya unutursun ne olduklarını.
Çok fazla değiştirmemeye çalıştım ama ben kabaca böyle yapardım. Aslında pointer aritmetiği kullanmak çok daha mantıklı olacaktır.
Strcmp de direkt öyle çalışmaz, sıfırdan küçük değer verir, direkt -1 vermez her zaman. Ama bu seviye için önemli değil.

Kod:
#include <stdio.h>

int my_strlen(char* str) {
    int i = 0;

    while (str[i] != 0) {
        ++i;
    }

    return i;
}

char* my_strcpy(char* dest, char* src) {
    int i = 0;

    while (src[i] != 0) {
        dest[i] = src[i];
    }

    dest[i] = src[i];
    
    return dest;
}

int my_strcmp(char* str1, char* str2) {
    int i = 0;

    while (1) {
        if (str1[i] != str2[i]) {
            return str1[i] < str2[i] ? -1 : 1;
        }

        if (str1[i] = 0) {
            return 0;
        }
    }
}

char* my_strcat(char* str1, char* str2) {
    int i1 = 0;
    int i2 = 0;

    while (str1[i1] != 0) {
        ++i1;
    }

    while (str2[i2] != 0) {
        str1[i1] = str2[i2];
        ++i1;
        ++i2;
    }

    str1[i1] = str2[i2];

    return str1;
}

char* my_strncat(char* str1, char* str2, int n) {
    int i1 = 0;
    int i2 = 0;

    while (str1[i1] != 0) {
        ++i1;
    }

    for (; i2 < n; ++i2, ++i1) {
        str1[i1] = str2[i2];
    }

    str1[i1] = str2[i2];

    return str1;
}

void son() {
    printf("Islem sonlanmistir.\n");
}

void bir(char* str1, char* str2) {
    printf("1. dizide %d tane harf var.\n2. dizide %d tane harf var.\n", my_strlen(str1), my_strlen(str2));
}

void iki(char* str1, char* str2) {
    my_strcpy(str1, str2);
    printf("1. dizi = %s\n", str1);
}

void uc(char* str1, char* str2) {
    int result = my_strcmp(str1, str2);

    if (result == 0) {
        printf("Islem sonucu %d diziler esittir.\n", result);
    }
    else {
        printf("Islem sonucu %d diziler farklidir.\n", result);
    }
}

void dort(char* str1, char* str2) {
    my_strcat(str1, str2);
    printf("1. Dizi = %s\n", str1);
}

void bes(char* str1, char* str2) {
    int n = 0;
    printf("1. Dizinin kac harfi s2 Dizisine eklensin.\n 5 harfi gecemez.\n");
    scanf("%d", &n);

    my_strncat(str1, str2, n);

    printf("2. Dizi = %s\n", str2);
}

int secFonk() {
    int sec = 0;

    printf("1-Dizilerin kac harften olustugunu gosterir.\n");
    printf("2-s2 dizisini s1 dizisine kopyalar.\n");
    printf("3-s1 dizisi ile s2 dizisini karsilastirir.\n");
    printf("4-s2 dizisini s1 dizininin sonuna ekler.\n");
    printf("5-s1 dizisini 5 harften fazla olmayacak sekilde s2 dizisine ekler.\n");
    printf("istediginiz islemi seciniz.\n");
    scanf("%d", &sec);

    return sec;
}

int flagFonk() {
    int flag = 0;
    printf("Baska islem yapmak istiyormusunuz.\nEvet = 1 Hayir = 2\n");
    scanf("%d", &flag);

    return flag;
}

int main() {
    char s1[] = "anime";
    char s2[] = "kitap";

    int sec = 0;
    int k = 0;
    int p = 0;

    volatile int flag = 1;

    while (flag) {
        sec = secFonk();

        switch (sec)     {
        case 1: bir(s1, s2);    break;
        case 2: iki(s1, s2);    break;
        case 3: uc(s1, s2);    break;
        case 4: dort(s1, s2);    break;
        case 5: bes(s1, s2);    break;
        default: printf("Hatali tuslama yaptiniz.\n"); break;
        }

        flag = flagFonk();
    }

    return 0;
}
Bu 1 = True eşitliğini yanlış kılmaz.
Kılar. C'de true yoktur.
Kodun sonunda devam etmek ister misiniz diye sorup p'ye 1 ve 2 atayacakmış. Rastgele değer dönmeyecek. Hayır için kullanıcı 2 yazarsa döngü sonlanacak.
Volatile keyword'ünü öğrenmenizi tavsiye ederim.
Sizin yazdığınız ile compile edilen şey aynı olmuyor.

119. satır hatalı bu arada.
Hala sadece boşlukları siliyorum. Nerede kod yazıyorsunuz, nasıl kopyalıyorsunuz anlamıyorum.

Belki okumak isteyen olur diye okunaklı halini paylaşayım.
Kod:
#include <stdio.h>


int my_strlen(char s1[]) {
    int a = 0;
    int b = 0;

    for (a = 0; s1[a] != '\0'; ++a) {
        b++;
    }

    return b;
}

char* my_strcpy(char s1[], char s2[]) {
    int a = 0;

    for (; a < my_strlen(s1); ++a) {
        s1[a] = s2[a];
    }

    return s1;
}

int my_strcmp(char s1[], char s2[]) {
    int a = 0;
    int b;

    if (my_strlen(s1) != my_strlen(s2)) {
        return -1;
    }

    for (; a < my_strlen(s1); ++a) {
        if (s1[a] == s2[a]) {
            b = 0;
        }
        else {
            return -1;
        }
    }

    return b;
}

char* my_strcat(char s1[], char s2[]) {
    int a;
    int b = my_strlen(s1);

    for (a = 0; a < my_strlen(s2); ++a) {
        s1 = s2[a];
        b += 1;
    }

    return s1;
}

char* my_strncat(char s1[], char s2[], int n) {

    int a;
    int b = my_strlen(s2);

    for (a = 0; a != n; ++a) {
        s2 = s1[a];
        b += 1;
    }

    return s2;
}

void son() {
    printf("Islem sonlanmistir.\n");
}

int main() {
    char s1[] = "anime";
    char s2[] = "kitap";

    int f;
    int k;
    int p;

    printf("1-Dizilerin kac harften olustugunu gosterir.\n");
    printf("2-s2 dizisini s1 dizisine kopyalar.\n");
    printf("3-s1 dizisi ile s2 dizisini karsilastirir.\n");
    printf("4-s2 dizisini s1 dizininin sonuna ekler.\n");
    printf("5-s1 dizisini 5 harften fazla olmayacak sekilde s2 dizisine ekler.\n");
    printf("istediginiz islemi seciniz.\n");
    scanf("%d", &f);

    if (f == 1)    {
        goto bir;
    }
    else if (f == 2) {
        goto iki;
    }
    else if (f == 3) {
        goto uc;
    }
    else if (f == 4) {
        goto dort;
    }
    else {
        goto bes;
    }

bir:
    printf("1. dizide %d tane harf var.\n2. dizide %d tane harf var.\n", my_strlen(s1), my_strlen(s2));
    printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");
    scanf("%d", &p);

    if (p == 1) {

    }
    else if (p == 2) {
        son();
        return 0;
    }

iki:
    my_strcpy(s1, s2);
    printf("1. dizi = %s\n", s1);
    printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");
    scanf("%d", &p);

    if (p == 1) {

    }
    else if (p == 2) {
        son();
        return 0;
    }

uc:
    if (my_strcmp(s1, s2) == 0) {
        printf("Islem sonucu %d diziler esittir.\n", my_strcmp(s1, s2));
    }
    else {
        printf("Islem sonucu %d diziler farklidir.\n", my_strcmp(s1, s2));
    }

    printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");
    scanf("%d", &p);

    if (p == 1) {

    }
    else if (p == 2) {
        son();
        return 0;
    }

dort:
    my_strcat(s1, s2);
    printf("1. Dizi = %s\n", s1);
    printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");
    scanf("%d", &p);

    if (p == 1) {

    }
    else if (p == 2) {
        son();
        return 0;
    }

bes:
    printf("1. Dizinin kac harfi s2 Dizisine eklensin.\n5 harfi gecemez.\n");

    scanf("%d", &k);

    my_strncat(s1, s2, k);

    printf("2. Dizi = %s\n", s2);

    printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");
    scanf("%d", &p);

    if (p == 1) {
    }
    else if (p == 2) {
        son();
        return 0;
    }
    return 0;
}
 
Son düzenleme:
Bilgim var dostum fakat neyin true olduğunu göstermemişsin.
Görünüşü 400 satır kod olduğu için incelemem lazım ama goto kullanmadan kod yazmak mümkün.


Bu şekilde yapılırsa compiler'ın insafına kalınır.

Çok değil, C ile ilgili konulara yazmadan önce sadece 2 gram C öğrenmenizi tavsiye ediyorum.
:D aynen hocam bilgisizim.
 
Değişkenleri her zaman ilklendir.
Değişkenlere güzel isim var. f, k ve p anlamsız. 2 haftaya unutursun ne olduklarını.
Çok fazla değiştirmemeye çalıştım ama ben kabaca böyle yapardım. Aslında pointer aritmetiği kullanmak çok daha mantıklı olacaktır.
Strcmp de direkt öyle çalışmaz, sıfırdan küçük değer verir, direkt -1 vermez her zaman. Ama bu seviye için önemli değil.

Kod:
#include <stdio.h>

int my_strlen(char* str) {
    int i = 0;

    while (str[i] != 0) {
        ++i;
    }

    return i;
}

char* my_strcpy(char* dest, char* src) {
    int i = 0;

    while (src[i] != 0) {
        dest[i] = src[i];
    }

    dest[i] = src[i];
    
    return dest;
}

int my_strcmp(char* str1, char* str2) {
    int i = 0;

    while (1) {
        if (str1[i] != str2[i]) {
            return str1[i] < str2[i] ? -1 : 1;
        }

        if (str1[i] = 0) {
            return 0;
        }
    }
}

char* my_strcat(char* str1, char* str2) {
    int i1 = 0;
    int i2 = 0;

    while (str1[i1] != 0) {
        ++i1;
    }

    while (str2[i2] != 0) {
        str1[i1] = str2[i2];
        ++i1;
        ++i2;
    }

    str1[i1] = str2[i2];

    return str1;
}

char* my_strncat(char* str1, char* str2, int n) {
    int i1 = 0;
    int i2 = 0;

    while (str1[i1] != 0) {
        ++i1;
    }

    for (; i2 < n; ++i2, ++i1) {
        str1[i1] = str2[i2];
    }

    str1[i1] = str2[i2];

    return str1;
}

void son() {
    printf("Islem sonlanmistir.\n");
}

void bir(char* str1, char* str2) {
    printf("1. dizide %d tane harf var.\n2. dizide %d tane harf var.\n", my_strlen(str1), my_strlen(str2));
}

void iki(char* str1, char* str2) {
    my_strcpy(str1, str2);
    printf("1. dizi = %s\n", str1);
}

void uc(char* str1, char* str2) {
    int result = my_strcmp(str1, str2);

    if (result == 0) {
        printf("Islem sonucu %d diziler esittir.\n", result);
    }
    else {
        printf("Islem sonucu %d diziler farklidir.\n", result);
    }
}

void dort(char* str1, char* str2) {
    my_strcat(str1, str2);
    printf("1. Dizi = %s\n", str1);
}

void bes(char* str1, char* str2) {
    int n = 0;
    printf("1. Dizinin kac harfi s2 Dizisine eklensin.\n 5 harfi gecemez.\n");
    scanf("%d", &n);

    my_strncat(str1, str2, n);

    printf("2. Dizi = %s\n", str2);
}

int secFonk() {
    int sec = 0;

    printf("1-Dizilerin kac harften olustugunu gosterir.\n");
    printf("2-s2 dizisini s1 dizisine kopyalar.\n");
    printf("3-s1 dizisi ile s2 dizisini karsilastirir.\n");
    printf("4-s2 dizisini s1 dizininin sonuna ekler.\n");
    printf("5-s1 dizisini 5 harften fazla olmayacak sekilde s2 dizisine ekler.\n");
    printf("istediginiz islemi seciniz.\n");
    scanf("%d", &sec);

    return sec;
}

int flagFonk() {
    int flag = 0;
    printf("Baska islem yapmak istiyormusunuz.\nEvet = 1 Hayir = 2\n");
    scanf("%d", &flag);

    return flag;
}

int main() {
    char s1[] = "anime";
    char s2[] = "kitap";

    int sec = 0;
    int k = 0;
    int p = 0;

    volatile int flag = 1;

    while (flag) {
        sec = secFonk();

        switch (sec)     {
        case 1: bir(s1, s2);    break;
        case 2: iki(s1, s2);    break;
        case 3: uc(s1, s2);    break;
        case 4: dort(s1, s2);    break;
        case 5: bes(s1, s2);    break;
        default: printf("Hatali tuslama yaptiniz.\n"); break;
        }

        flag = flagFonk();
    }

    return 0;
}
 
Çözüm
Kılar. C'de true yoktur.

Volatile Keyword'ünü öğrenmenizi tavsiye ederim.
Sizin yazdığınız ile compile edilen şey aynı olmuyor.

119. satır hatalı bu arada.
Hala sadece boşlukları siliyorum. Nerede kod yazıyorsunuz, nasıl kopyalıyorsunuz anlamıyorum.

Belki okumak isteyen olur diye okunaklı halini paylaşayım.
Kod:
#include <stdio.h>

int my_strlen(char s1[]) {
 int a = 0;
 int b = 0;

 for (a = 0; s1[a] != '\0'; ++a) {
 b++;
 }

 return b;
}

char* my_strcpy(char s1[], char s2[]) {
 int a = 0;

 for (; a < my_strlen(s1); ++a) {
 s1[a] = s2[a];
 }

 return s1;
}

int my_strcmp(char s1[], char s2[]) {
 int a = 0;
 int b;

 if (my_strlen(s1) != my_strlen(s2)) {
 return -1;
 }

 for (; a < my_strlen(s1); ++a) {
 if (s1[a] == s2[a]) {
 b = 0;
 }
 else {
 return -1;
 }
 }

 return b;
}

char* my_strcat(char s1[], char s2[]) {
 int a;
 int b = my_strlen(s1);

 for (a = 0; a < my_strlen(s2); ++a) {
 s1 = s2[a];
 b += 1;
 }

 return s1;
}

char* my_strncat(char s1[], char s2[], int n) {

 int a;
 int b = my_strlen(s2);

 for (a = 0; a != n; ++a) {
 s2 = s1[a];
 b += 1;
 }

 return s2;
}

void son() {
 printf("Islem sonlanmistir.\n");
}

int main() {
 char s1[] = "anime";
 char s2[] = "kitap";

 int f;
 int k;
 int p;

 printf("1-Dizilerin kac harften olustugunu gosterir.\n");
 printf("2-s2 dizisini s1 dizisine kopyalar.\n");
 printf("3-s1 dizisi ile s2 dizisini karsilastirir.\n");
 printf("4-s2 dizisini s1 dizininin sonuna ekler.\n");
 printf("5-s1 dizisini 5 harften fazla olmayacak sekilde s2 dizisine ekler.\n");
 printf("istediginiz islemi seciniz.\n");
 scanf("%d", &f);

 if (f == 1) {
 goto bir;
 }
 else if (f == 2) {
 goto iki;
 }
 else if (f == 3) {
 goto uc;
 }
 else if (f == 4) {
 goto dort;
 }
 else {
 goto bes;
 }

bir:
 printf("1. dizide %d tane harf var.\n2. dizide %d tane harf var.\n", my_strlen(s1), my_strlen(s2));
 printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");
 scanf("%d", &p);

 if (p == 1) {

 }
 else if (p == 2) {
 son();
 return 0;
 }

iki:
 my_strcpy(s1, s2);
 printf("1. dizi = %s\n", s1);
 printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");
 scanf("%d", &p);

 if (p == 1) {

 }
 else if (p == 2) {
 son();
 return 0;
 }

uc:
 if (my_strcmp(s1, s2) == 0) {
 printf("Islem sonucu %d diziler esittir.\n", my_strcmp(s1, s2));
 }
 else {
 printf("Islem sonucu %d diziler farklidir.\n", my_strcmp(s1, s2));
 }

 printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");
 scanf("%d", &p);

 if (p == 1) {

 }
 else if (p == 2) {
 son();
 return 0;
 }

dort:
 my_strcat(s1, s2);
 printf("1. Dizi = %s\n", s1);
 printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");
 scanf("%d", &p);

 if (p == 1) {

 }
 else if (p == 2) {
 son();
 return 0;
 }

bes:
 printf("1. Dizinin kac harfi s2 Dizisine eklensin.\n5 harfi gecemez.\n");

 scanf("%d", &k);

 my_strncat(s1, s2, k);

 printf("2. Dizi = %s\n", s2);

 printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");
 scanf("%d", &p);

 if (p == 1) {
 }
 else if (p == 2) {
 son();
 return 0;
 }
 return 0;
}

Kodları dev-C++ de yazıyorum. Ben kodu direk yapıştırdığımda 230 satır civarı oluyordu, moderatör düzenlerken araya boşluk koymuş bayağı. 119. satıra baktım moderatör düzenlerken bozmuş. Oraya yazdığım -s1=s2[a];- idi.
Değişkenleri her zaman ilklendir.
Değişkenlere güzel isim var. f, k ve p anlamsız. 2 haftaya unutursun ne olduklarını.
Çok fazla değiştirmemeye çalıştım ama ben kabaca böyle yapardım. Aslında pointer aritmetiği kullanmak çok daha mantıklı olacaktır.
Strcmp de direkt öyle çalışmaz, sıfırdan küçük değer verir, direkt -1 vermez her zaman. Ama bu seviye için önemli değil.

Kod:
#include <stdio.h>

int my_strlen(char* str) {
    int i = 0;

    while (str[i] != 0) {
        ++i;
    }

    return i;
}

char* my_strcpy(char* dest, char* src) {
    int i = 0;

    while (src[i] != 0) {
        dest[i] = src[i];
    }

    dest[i] = src[i];
   
    return dest;
}

int my_strcmp(char* str1, char* str2) {
    int i = 0;

    while (1) {
        if (str1[i] != str2[i]) {
            return str1[i] < str2[i] ? -1 : 1;
        }

        if (str1[i] = 0) {
            return 0;
        }
    }
}

char* my_strcat(char* str1, char* str2) {
    int i1 = 0;
    int i2 = 0;

    while (str1[i1] != 0) {
        ++i1;
    }

    while (str2[i2] != 0) {
        str1[i1] = str2[i2];
        ++i1;
        ++i2;
    }

    str1[i1] = str2[i2];

    return str1;
}

char* my_strncat(char* str1, char* str2, int n) {
    int i1 = 0;
    int i2 = 0;

    while (str1[i1] != 0) {
        ++i1;
    }

    for (; i2 < n; ++i2, ++i1) {
        str1[i1] = str2[i2];
    }

    str1[i1] = str2[i2];

    return str1;
}

void son() {
    printf("Islem sonlanmistir.\n");
}

void bir(char* str1, char* str2) {
    printf("1. dizide %d tane harf var.\n2. dizide %d tane harf var.\n", my_strlen(str1), my_strlen(str2));
}

void iki(char* str1, char* str2) {
    my_strcpy(str1, str2);
    printf("1. dizi = %s\n", str1);
}

void uc(char* str1, char* str2) {
    int result = my_strcmp(str1, str2);

    if (result == 0) {
        printf("Islem sonucu %d diziler esittir.\n", result);
    }
    else {
        printf("Islem sonucu %d diziler farklidir.\n", result);
    }
}

void dort(char* str1, char* str2) {
    my_strcat(str1, str2);
    printf("1. Dizi = %s\n", str1);
}

void bes(char* str1, char* str2) {
    int n = 0;
    printf("1. Dizinin kac harfi s2 Dizisine eklensin.\n 5 harfi gecemez.\n");
    scanf("%d", &n);

    my_strncat(str1, str2, n);

    printf("2. Dizi = %s\n", str2);
}

int secFonk() {
    int sec = 0;

    printf("1-Dizilerin kac harften olustugunu gosterir.\n");
    printf("2-s2 dizisini s1 dizisine kopyalar.\n");
    printf("3-s1 dizisi ile s2 dizisini karsilastirir.\n");
    printf("4-s2 dizisini s1 dizininin sonuna ekler.\n");
    printf("5-s1 dizisini 5 harften fazla olmayacak sekilde s2 dizisine ekler.\n");
    printf("istediginiz islemi seciniz.\n");
    scanf("%d", &sec);

    return sec;
}

int flagFonk() {
    int flag = 0;
    printf("Baska islem yapmak istiyormusunuz.\nEvet = 1 Hayir = 2\n");
    scanf("%d", &flag);

    return flag;
}

int main() {
    char s1[] = "anime";
    char s2[] = "kitap";

    int sec = 0;
    int k = 0;
    int p = 0;

    volatile int flag = 1;

    while (flag) {
        sec = secFonk();

        switch (sec)     {
        case 1: bir(s1, s2);    break;
        case 2: iki(s1, s2);    break;
        case 3: uc(s1, s2);    break;
        case 4: dort(s1, s2);    break;
        case 5: bes(s1, s2);    break;
        default: printf("Hatali tuslama yaptiniz.\n"); break;
        }

        flag = flagFonk();
    }

    return 0;
}
Ödevin süresi 18.00 olsa da düzenleyip cevapladığın için teşekkür ederim. Switch case kullanarak bir kaç hatası ile birlikte ödevi teslim ettim.
 
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Geri
Yukarı