Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++, Miten tehdä?

Evo [14.07.2005 14:33:47]

#

int rpm; {
char rpm[36];
cin >> rpm;
system("clear");
cout << "Looking for " << rpm << " please wait.." <<endl;
sprintf(rpm, "wget http://urli.urli.com/ -O tiedosto");
system(rpm);

Eli tarkoitus olisi saada cin syöte "tiedosto":n paikalle, onko kenelläkään ideoita miten toteuttaa?

sooda [14.07.2005 15:13:40]

#

sprintf(rpm, "wget http://urli.urli.com/ -O %s", rpm);

Ohoh, koodic-tagit epäosaa hienosti. Laaksoneeen.. löyty korjattavaa sulle :)

kooderi [15.07.2005 00:10:42]

#

Ei ole kovinkaan järkevää käyttää samaa muuttujannimeä kahdelle eri tietotyypille (rpm esitelty intiksi ja charritaulukoksi). Vaikka kuinka toinen on esitelty sulkeiden sisällä, tuolla kerjää vaan verta nenästään., Eikä se myöskään ole kovin luettavaakaan.

Metabolix [15.07.2005 16:59:19]

#

On muuten aika vähän jätetty tilaa tiedostonimelle. Laita vain suosiolla vähän isompi taulu.

Minä tietenkin tekisin tuon paljon rumemmin:

char buf[100] = "wget http://urli.urli.com/ -O ";
char *tiedosto = &(buf[30]);
cin >> tiedosto;
cout << "Looking for " << tiedosto << " please wait.." << endl;
system(buf);

Ei tarvitse kenenkään tulla valittamaan, että tämä on huono tapa :)

thefox [16.07.2005 10:31:25]

#

Huono tapa ;) Tässä ei ole tullut vielä yhtään toimivaa esimerkkiä. Varokaa niitä puskuriylivuotoja!

Metabolix [16.07.2005 11:19:02]

#

Niin no, enhän minä tietenkään cin-oliota käyttäisi.
scanf("%70s", tiedosto);
En tiedä, miten tuo rajoitus sitten cin:llä tapahtuu.

FooBat [17.07.2005 00:49:32]

#

#include <iostream>
#include <string>

using namespace std;

int main(int args, char ** argv) {
  string sTiedosto;
  char cTiedosto[100];
  char wget[] = "wget http://urli.urli.com/ -O ";

  cin >> sTiedosto;
  cout << "Looking for " << sTiedosto << " please wait.." << endl;
  string sKomento = wget+sTiedosto;
  system(sKomento.c_str());


  cin.width(sizeof(cTiedosto));
  cin >> cTiedosto;
  cout << "Looking for " << cTiedosto << " please wait.." << endl;
  char buffer[sizeof(wget)+sizeof(cTiedosto)];
  sprintf(buffer, "%s %s", wget, cTiedosto);
  system(buffer);

  return EXIT_SUCCESS;
}

Tuossa eräs ratkaisu stringeillä ja ilman. Noille virroille voi antaa kaikenlaisia määritteitä, joilla säädellään mitä ne lukee tai kirjoittaa.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta