[Duda C] Como añadir variable a la función system()

Iniciado por Dryken, 2 Julio 2012, 17:42 PM

0 Miembros y 1 Visitante están viendo este tema.

Dryken

Estoy tratando de hacer un simple código que te pida cuantas veces quieres crear un carpeta en C:// y posteriormente estas se creen con nombres aleatorios pero salta un problema.

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

main(){

int num,cifra;
char azar[] = "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z";

srand (time(NULL));   
azar=rand();

printf("Veces a abrir:\t");
scanf("%i",&cifra);

for(num=0;num<=cifra;num++)
system("mkdir c:\\%d",azar);
getchar();

}


Sé que no está bien meter la variable azar dentro de la función system(); ya que da error pero no se me ocurre como podría hacerlo.
Lo intentas y fracasas, lo intentas y fracasas pero fracasas realmente cuando dejas de intentarlo.

Calc Don v0.7 - C
http://foro.elhacker.net/programacion_cc/source_calculadora_calc_don_10-t366489.0.html

Hundir la flota v0.3 - C#
http://foro.elhacker.net/net/source_c_juego_hundir_la_flota_v01-t377794.0.html

0xDani

#1
Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
//windows.h no hace falta.

int main(){
int random, cifra;
char azar[]= "abcdefghijklmnñopqrstuvwxyz";
srand(time(NULL));
char mkdir[10]="mkdir C:\\";
printf("Veces a abrir:\t");
scanf("i", &cifra);
for(int i=0; i<cifra; i++){
random=rand()%26+0;//maximo+minimo
mkdir[10] = azar[random];
system(mkdir);
}return 0;
}



Mira a ver si funciona, puede que haya que cambiar algunas cosas.
Saludos.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

DickGumshoe

#2
EDITO 2:

Sí, al final creo que estaba bien lo que dije antes.

Daniyo, en strcat(), el segundo parámetro debe ser una cadena de caracteres (char*), no un solo carácter(char), ya que el prototipo es:

char *strcat(char*s1, const char *s2);

Para solucionarlo puedes obtener la longitud de la primera cadena con strlen() y meter el carácter que quieras en esa posición.

Saludos.

0xDani

Cierto, y ahora que lo dices en el rand() deberia haberle puesto 26 + 0, ya que los subindices empiezan en cero. Ahora lo edito.

Saludos.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

Dryken

Oye daniyo está estupendo el código, me ha sorprendido lo de system(mkdir); ya que no sabía que se pudiese añadir a la funcion system() una variable así directamente. Además está perfectamente enlazado, siempre me dan problemas las uniones  :-\.

DickGumshoe llevabas razón, también se podría hacer cambiando lo de concatenar funciones por midiendo su longitud, aunque así lo veo bastante bien.

Que alegría me dais compañeros  ;-)
Lo intentas y fracasas, lo intentas y fracasas pero fracasas realmente cuando dejas de intentarlo.

Calc Don v0.7 - C
http://foro.elhacker.net/programacion_cc/source_calculadora_calc_don_10-t366489.0.html

Hundir la flota v0.3 - C#
http://foro.elhacker.net/net/source_c_juego_hundir_la_flota_v01-t377794.0.html

0xDani

El caso es que yo no lo he probado, ¿funciona?.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

Dryken

En principio sí, y digo principio porque a veces, bastante a menudo, salta un mensaje de acceso denegado...esta bien estructurado y todo pero no se, a ver si consigo solucionarlo.

Estoy andando a ver si consigo sacarlo concatenando funciones, es decir, hacerlo con strcat pero me cuesta porque para hacerlo con esta funcion es necesario 2 variables tipo char(cadena)... las 2 serian mkdir y una sola que una azar[random].

El caso es que azar y random no son ambas variables char porque random es variable integer...pues a ver si consigo tener las 2 variables char y ya os digo.
Lo intentas y fracasas, lo intentas y fracasas pero fracasas realmente cuando dejas de intentarlo.

Calc Don v0.7 - C
http://foro.elhacker.net/programacion_cc/source_calculadora_calc_don_10-t366489.0.html

Hundir la flota v0.3 - C#
http://foro.elhacker.net/net/source_c_juego_hundir_la_flota_v01-t377794.0.html

Fire544

#7
Hola !! intenta concatenar con strcat lo que tienes que hacer es meter en una variable char [] como origen y otra como destino del mismo tipo, pero tendrias que tomar en cuenta el final de cada cadena me explico.

Código (cpp) [Seleccionar]

/*si te fijas al final de la cadena hay un espacio, esto es para poder meter la cadena al final de la linea + un espacio*/
char cadenaOrigen[]="mkdir C:\\ "
//declaramos variable destino
char datosIngresados[5];
//esperamos datos
fgets(datosIngresados, 5, stdin);
//concatenara datosIngresado en cadenaOrigen y sabiendo que cadena origen tiene el comando mkdir mas un espacio para respetar la sintaxis de windows.
strcat(cadenaOrigen, datosIngresados);
//llamamos a system con la llamada al sistema alojada en cadenaOrigen
system(cadenaOrigen);


Para lo de meter un entero aleatorio a una cadena puedes hacer casteo explicito mira.

Código (cpp) [Seleccionar]

char cadena[]="mkdir ", ingresaDatos[5], val;
int var_rand=0;

srand(time(NULL));
//pedimos datos al usuario
scanf("%i", &val);

for(int i=0; i<val; i++)
{
var_rand = rand() % 25 + 0;
//casteo de entero a char
strcat(cadena, (char*)var_rand);
system(cadena);
}
"Si enseñas a pezcar a un niño lo ayudas para toda la vida, si pezcas para alimentarlo lo ayudas por un momento".

durasno

CitarEl caso es que azar y random no son ambas variables char porque random es variable integer...pues a ver si consigo tener las 2 variables char y ya os digo.

Hola! busca sprintf


Saludos
Ahorrate una pregunta, lee el man

BlackZeroX


Código (cpp) [Seleccionar]


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

char *readLine(FILE *file) {
    char *line = (char*)malloc(1);
    size_t size = 0;

    while ((line[size] = getchar()) != '\n')
        line = (char*)realloc(line, ++size + 1);

    line[size] = '\0';

    return line;
}

int main() {     // ==============
    char cmd[512];
    char *path; //  MAX_PATH = 256

    puts("Ruta a crear");
    path = readLine(stdin); //  leemos una linea desde el buffer de entrada del teclado
    sprintf(cmd, "mkdir \"%s\"", path); //  construimos la cadena por ejemplo: mkdir "c:\Hola Mundo desde C-ANSI"
    system(cmd);    //  Ejecutamos.

    free(path);
    getchar();
    return EXIT_SUCCESS;
}



Dulces Lunas!¡.
The Dark Shadow is my passion.