[Çözüldü] system() fonksiyonuna parametre gönderme sorunu

Başlatan Jey@Nfer, 11 Nisan 2012 - 10:05:15

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

Jey@Nfer

Arkadaşlar c ile yazdığım bir kodda bir değişkeni parametre olarak system fonksiyonuna göndermek istiyorum fakat nasıl yapacağımı bilemiyorum.

Kabataslak açıklamak gerekirse ;
Bir klasörde 1.jpg , 2.jpg ,3.jpg ......17.jpg ... gibi düzenli olarak isimlendirilmiş jpg dosyalarım var ,  program çalıştığında bir değişkene rastgele bir değer atanmasını ve bu değere sahip jpg uzantılı dosyanın açılmasını istiyorum.


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

main()
{
    srand(time(NULL));
   
    i=1+rand()30;

    system("eog %d.jpg &",i);  //işte hata burda misal i=13 ise 13.jpg açılsın

}



system fonksiyonu 2 parametre almıyor orda hata veriyor ,  nasıl yapacağımı bilmediğim için açıklama açısından yazdım burda. 
Bu sorunu nasıl çözebilirim bi yardımcı olursanız çok sevinicem gerçekten.
Şimdiden teşekkürler!
Hırs , azim , tevekkül ...

www.mehmetvahit.net

sem

Selamlar

Evet system fonksiyonu tek parametre ile çalışıyor. Ve o da karakter dizisi. Bu nedenle system fonksiyonu içerisinde düzenlemek istediğiniz karakter dizisini önceden hazırlamanız gerekiyor. Bunun yapmanın değişik yolları olabilir. Ben aşağıdaki şekilde ekrana yazar gibi bellek bölgesine bir alana yazabileceğiniz sprintf fonksiyonunu önereceğim. Aşağıda total değişkeninin düzenlenme mantığı ile system fonksiyonuna göndermek istediğiniz karakter dizisini oluşturabilirsiniz.

Kolay gelsin...


#include <stdio.h>
#include <malloc.h>

int main()
{
   char str[] = " görselini aç!";
   int  counter = 1;
   char ext[] = ".jpg";

   char *total;

   total = (char *)malloc(50 * sizeof(char));

   do{
       sprintf(total, "%d%s %s", counter, ext, str);
       puts(total);
   }while(counter++ < 20);
   free(total);
}


Çıktısı;

Alıntı Yap1.jpg  görselini aç!
2.jpg  görselini aç!
3.jpg  görselini aç!
4.jpg  görselini aç!
5.jpg  görselini aç!
6.jpg  görselini aç!
7.jpg  görselini aç!
8.jpg  görselini aç!
9.jpg  görselini aç!
10.jpg  görselini aç!
11.jpg  görselini aç!
12.jpg  görselini aç!
13.jpg  görselini aç!
14.jpg  görselini aç!
15.jpg  görselini aç!
16.jpg  görselini aç!
17.jpg  görselini aç!
18.jpg  görselini aç!
19.jpg  görselini aç!
20.jpg  görselini aç!
".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?

Jey@Nfer

Teşekkürler @sem0900 .
Ayrıca başka bir yöntem de şu şekilde olabiliyormuş :


int runSystem(const char *fmt, ...)
{
    char buffer[4096];
    va_list va;
    va_start(va, fmt);
    vsnprintf(buffer, sizeof(buffer), fmt, va);
    va_end(va);
    return system(buffer);
}

main()
{
    srand(time(NULL));

    i=rand()%30+1;

    runSystem("eog %d.jpg &",i);

}


Fakat ben de snprintf yöntemini kullandım açıkcası :)
Hırs , azim , tevekkül ...

www.mehmetvahit.net

sem

Hmm.. Çok zekice =)...

Bilmeyen arkadaşlar için anekdotumuzu düşelim; fonksiyon parametrelerinde üç nokta (...) bulunması yani yukarıdaki örnek için runSystem fonksiyonunda olduğu gibi; fonksiyonun belirsiz sayıda parametre alabileceğini belirtir.

Örneğin printf fonksiyonu da aslında bir standart, bizim yazdıklarımız gibi bir fonksiyondur. Fakat %d %s gibi belirteçler sayesinde istediğimiz kadar parametre geçebiliyoruz içerisine. Protipini incelersek;

int printf( const char *format ,...)

şeklinde olduğunu ve iki parametre yerine belirtilen 3 nokta ile bu esnekliğe sahip olduğunu anlayabiliyoruz.



Sorun çözüldüğüne göre başlığı etiketleyebilirsiniz sanırım. İYi çalışmalar.
".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?