Autor
|
Tema: [Duda C] Como añadir variable a la función system() (Leído 9,600 veces)
|
Dryken
Desconectado
Mensajes: 117
El arte de vencer se aprende en las derrotas
|
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.
|
|
|
En línea
|
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
#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.
|
|
« Última modificación: 2 Julio 2012, 18:53 pm por daniyo »
|
En línea
|
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
|
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.
|
|
« Última modificación: 2 Julio 2012, 18:44 pm por DickGumshoe »
|
En línea
|
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
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.
|
|
|
En línea
|
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
Desconectado
Mensajes: 117
El arte de vencer se aprende en las derrotas
|
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
|
|
|
En línea
|
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
El caso es que yo no lo he probado, ¿funciona?.
|
|
|
En línea
|
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
Desconectado
Mensajes: 117
El arte de vencer se aprende en las derrotas
|
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.
|
|
|
En línea
|
|
|
|
Fire544
Desconectado
Mensajes: 85
"Escucha el sonido del 0, 1"
|
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. /*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. 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); }
|
|
« Última modificación: 2 Julio 2012, 23:13 pm por Fire544 »
|
En línea
|
"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
Desconectado
Mensajes: 373
|
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. Hola! busca sprintf Saludos
|
|
|
En línea
|
Ahorrate una pregunta, lee el man
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
#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!¡.
|
|
|
En línea
|
The Dark Shadow is my passion.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[DUDA] añadir espacios al utilizar la función strcat
« 1 2 3 »
Programación C/C++
|
Dryken
|
25
|
16,634
|
11 Agosto 2012, 16:28 pm
por rir3760
|
|
|
system(variable) en C linux
Programación C/C++
|
soyloqbuskas
|
2
|
2,549
|
6 Octubre 2012, 01:24 am
por rir3760
|
|
|
Añadir el ID del registro de la tarjeta de red en una variable
Scripting
|
d3xf4ult
|
5
|
3,635
|
16 Noviembre 2013, 02:58 am
por Eleкtro
|
|
|
como regreso mas de un variable de una funcion con un apuntador??
« 1 2 »
Programación C/C++
|
hugodavidx
|
13
|
6,459
|
3 Marzo 2014, 17:17 pm
por Yoel Alejandro
|
|
|
como se traduce la declaración de una variable dentro de una función a asm i386?
Programación General
|
MRx86
|
4
|
2,452
|
7 Enero 2017, 20:06 pm
por xv0
|
|