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

nolonger

Hectopat
Katılım
27 Şubat 2021
Mesajlar
153
Merhabalar Shell sistemi gibi.

Echo selam; echo selam2;

Çıktı;
Echo selam.
Echo selam2.

Gibi olacak.

Umarım anlatabilmişimdir bunu nasıl yapabilirim?
 
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.
 
Ö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);
    }
}
 
Ö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:
Çü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:
Çü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.
[CODE lang="c" title="Kod"] char *token = strtok(shell_buffer, ";");
while( token != '\0' ) {
char *comm = strtok(token, " ");
strtok(token, comm);
run_command(token);
token = strtok('\0', ";");
}
[/CODE]
@TerabyteForever alt satıra değilde değişken yapması gerekiyor.
 
[CODE lang="c" title="Kod"] char *token = strtok(shell_buffer, ";");
while( token != '\0' ) {
char *comm = strtok(token, " ");
strtok(token, comm);
run_command(token);
token = strtok('\0', ";");
}
[/CODE]
"token" değişkeninden operatör gibi şeyleri çıkartıyor ve run_command() ile çalıştırıyor.
 
"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?
 
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.
 

Geri
Yukarı