| 
	
		|  Autor | Tema: [Duda C] Como añadir variable a la función system()  (Leído 10,334 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 destinochar datosIngresados[5];//esperamos datosfgets(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 cadenaOrigensystem(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 usuarioscanf("%i", &val); for(int i=0; i<val; i++){var_rand = rand() % 25 + 0;//casteo de entero a charstrcat(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 | 18,107 |  11 Agosto 2012, 16:28 pm por rir3760
 |  
						|   |   | system(variable) en C linux Programación C/C++
 | soyloqbuskas | 2 | 2,798 |  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,993 |  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 | 7,186 |  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,761 |  7 Enero 2017, 20:06 pm por xv0
 |    |