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.
#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.
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.
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.
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 ;-)
El caso es que yo no lo he probado, ¿funciona?.
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.
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);
}
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
#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!¡.
Vaya BlackZeroX tu codigo funciona de lujo, me quedo con el. Gracias por compartirlo compañero ;)