C'de arraydan; karakteri ile yeni satıra nasıl geçilir?

elona

Picopat
Katılım
27 Şubat 2021
Mesajlar
114
Merhabalar Shell sistemi gibi.

Echo selam; echo selam2;

Çıktı;
Echo selam.
Echo selam2.

Gibi olacak.

Umarım anlatabilmişimdir bunu nasıl yapabilirim?
 

SKNET

Hectopat
Katılım
5 Kasım 2016
Mesajlar
162
Çözümler
4
boşlukla komuttan sonraki argümanları alıyorum echo selam kısmındaki echodan sonraki selam gibi

O kısmın neden çalışmadığını bir kontrol edip yazsam daha iyi olur, dönen sonuçları da tam olarak görüp ona göre düzenlerim. Yalnız şimdi biraz işim var muhtemelen birkaç saat içinde bunu bir deneyip düzenlemiş olurum.
 

TerabyteForever

Megapat
Katılım
5 Mart 2017
Mesajlar
6.249
Makaleler
6
Çözümler
56
Yer
/dev/ada0p1
Örnek bir program. Kodu anlamak çok da zor değil.
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void chop_str(char* str){
    while(*str){
        if(*str == ';'){
            *str = '\n';
        }
        str++;
    }
}
int main(int argc, char** argv){
    if(argc > 1){
        chop_str(argv[argc-1]);
        printf("%s\n",argv[argc-1]);
    }
    else{ //O zaman girdiyi stdin'den al.
        char str[156];
        scanf("%s",&str);
        chop_str(str);
        printf("%s\n",str);
    }
}
 
KS
KS
elona

elona

Picopat
Katılım
27 Şubat 2021
Mesajlar
114
Örnek bir program. Kodu anlamak çok da zor değil.
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void chop_str(char* str){
    while(*str){
        if(*str == ';'){
            *str = '\n';
        }
        str++;
    }
}
int main(int argc, char** argv){
    if(argc > 1){
        chop_str(argv[argc-1]);
        printf("%s\n",argv[argc-1]);
    }
    else{ //O zaman girdiyi stdin'den al.
        char str[156];
        scanf("%s",&str);
        chop_str(str);
        printf("%s\n",str);
    }
}
1632672933036.png

Düzgün çalışmıyor.
 
Son düzenleme:

TerabyteForever

Megapat
Katılım
5 Mart 2017
Mesajlar
6.249
Makaleler
6
Çözümler
56
Yer
/dev/ada0p1
Çünkü scanf() arıza çıkartıyor. Halledeyim.

İnternetim çok yavaş olduğu için iki saattir mesaj yollamaya çalışıyorum.
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void chop_str(char* str){
    while(*str){
        if(*str == ';'){
            *str = '\n';
        }
        str++;
    }
}
int main(int argc, char** argv){
    if(argc > 1){
        chop_str(argv[argc-1]);
        printf("%s\n",argv[argc-1]);
    }
    else{ //O zaman girdiyi stdin'den al.
        char str[65535];
        gets(&str);
        chop_str(str);
        printf("%s\n",str);
    }
}
Düzenleme: chop_str() fonksiyonuna yukarıdaki kodu koydum, pointer aritmetiğine alışman açısından daha iyi olur.
 
Son düzenleme:
KS
KS
elona

elona

Picopat
Katılım
27 Şubat 2021
Mesajlar
114
Çünkü scanf() arıza çıkartıyor. Halledeyim.

İnternetim çok yavaş olduğu için iki saattir mesaj yollamaya çalışıyorum.
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void chop_str(char* str){
    while(*str){
        if(*str == ';'){
            *str = '\n';
        }
        str++;
    }
}
int main(int argc, char** argv){
    if(argc > 1){
        chop_str(argv[argc-1]);
        printf("%s\n",argv[argc-1]);
    }
    else{ //O zaman girdiyi stdin'den al.
        char str[65535];
        gets(&str);
        chop_str(str);
        printf("%s\n",str);
    }
}
Düzenleme: chop_str() fonksiyonuna yukarıdaki kodu koydum, pointer aritmetiğine alışman açısından daha iyi olur.
rica etsem şu kodada bakar mısın?
JupiterOS'tan devam ediyorum.
Kod:
 char *token = strtok(shell_buffer, ";");
   while( token != '\0' ) {
    char *comm = strtok(token, " ");
     strtok(token, comm);
      run_command(token);
      token = strtok('\0', ";");
   }
@TerabyteForever alt satıra değilde değişken yapması gerekiyor.
 
KS
KS
elona

elona

Picopat
Katılım
27 Şubat 2021
Mesajlar
114
"token" değişkeninden operatör gibi şeyleri çıkartıyor ve run_command() ile çalıştırıyor.
bu kodda hata şu;
char *comm = strtok(token, " ");
strtok(token, comm);
olunca sadece ilk komutu alıyor ; den sonrasını almıyor fakat hata vermiyor
olmayınca ise argümanları almıyor ama ; den sonrasını alıp ne kadar komut varsa çalıştırıyor.
Bunu düzeltebilir misin zahmet olmaz ise?
 
Katılım
30 Ağustos 2020
Mesajlar
563
Makaleler
1
Çözümler
2
bu kodda hata şu;
char *comm = strtok(token, " ");
strtok(token, comm);
olunca sadece ilk komutu alıyor ; den sonrasını almıyor fakat hata vermiyor
olmayınca ise argümanları almıyor ama ; den sonrasını alıp ne kadar komut varsa çalıştırıyor.
Bunu düzeltebilir misin zahmet olmaz ise?
strtok a ikinci parametre olarak 0 gönderirsen aynı ayırmaya devam eder.
 
Yukarı