FILE *f;
int lectura1;
char lectura2[TAM];
int i=0;
if((f=fopen(fichero, "r"))==NULL){
fprintf(stderr, "\nError: no pudo abrirse fichero <%s>", fichero);
exit(-1);
}
for(i=0;i<numeroPalabras;i++){
while(fscanf(f, "%d_%s", &lectura1, lectura2)==2)
strcpy(vector[i],lectura2);
}
}
fclose(f);void reservaVector(){
char* vector;
if((vector=(char*)malloc(TAM*sizeof(char)))==NULL)
{
printf("Error: no pudo asignarse memoria\n");
exit(-1);
}
}
#define TAM 60
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ejercicio2.h"
void main(int argc, char* argv[]){
int nArgumentos=argc;
char* vector;
comprobarParametros(nArgumentos);
char* nombreF=argv[1];
if(existeFichero(nombreF)==0){
puts("El fichero de diccionario no existe");
exit(-1);
}
int numeroPalabras=(atoi(argv[5]));
if(comprobarPalabras(nombreF)<numeroPalabras){
puts("No hay tantas palabras en el archivo diccionario");
exit(-1);
}
reservaVector();
rellenaVector(nombreF,vector,numeroPalabras);
}
void reservaVector(){
char* vector;
if((vector=(char*)malloc(TAM*sizeof(char)))==NULL)
{
printf("Error: no pudo asignarse memoria\n");
exit(-1);
}
}
void rellenaVector(char* nombreF, char* vector, int numeroPalabras){
FILE *f;
int lectura1;
char lectura2[TAM];
int i=0;
if((f=fopen(nombreF, "r"))==NULL){
fprintf(stderr, "\nError: no pudo abrirse fichero <%s>", nombreF);
exit(-1);
}
for(i=0;i<numeroPalabras;i++){
while(fscanf(f, "%d_%s", &lectura1, lectura2)==2){
strcpy(vector[i],lectura2);
}
}
fclose(f);
}
void comprobarParametros(int nArgumentos){
if(nArgumentos!=6){ /*Comprobacion de que el programa ha sido llamado correctamente*/
printf("Llamada al programa incorrecta\n");
printf("Uso: generador.exe archivodiccionario ficheroalmacenamiento nFilas nColumnas nPalabras\n");
exit(-1);
}
}
int existeFichero(char *nombreF){
FILE *f;
f=fopen(nombreF, "r"); /*Abre el fichero en modo lectura*/
if(f==NULL){
return 0; /*Si el fichero no existe devuelve 0*/
}
else{ /*Si el fichero existe lo cierra y devuelve 1*/
fclose (f);
return 1;
}
}
int comprobarPalabras(char *nombreF){
FILE* f;
int lectura1;
char lectura2[TAM];
int salir=0;
int contar=0;
int contador=0;
if((f=fopen(nombreF, "r"))==NULL){ /*Abre el fichero en modo lectura*/
fprintf(stderr, "\nError: no pudo abrirse fichero <%s>", nombreF);
exit(-1);
}
while(salir==0){ /*Mientras la variable salir valga 0 sigue leyendo*/
contar=fscanf(f, "%d_%s", &lectura1, lectura2); /*Lee el fichero*/
if(contar==2) /*Si lee dos variables suma uno a la variable contador*/
contador++;
else /*Si no lee dos variables (fin de fichero) el bucle while termina*/
salir=1;
}
return contador;
fclose(f);
}
char* reservaVector(){
char* vector;
if((vector=(char*)malloc(TAM*sizeof(char)))==NULL)
{
printf("Error: no pudo asignarse memoria\n");
exit(-1);
}
return (vector);
} char* vector;
vector=reservaVector();
Sertinell escribió:Quizas por "vector de cadenas de caracteres" se refiera a "Array de punteros a caracter donde inicia cada una de las palabras".
typedef char Cadena[TAM+1];char* reservaVector(int numeroPalabras){
Cadena* vector;
if((vector=(Cadena*)malloc(numeroPalabras*sizeof(Cadena)))==NULL)
{
printf("Error: no pudo asignarse memoria\n");
exit(-1);
}
return (vector);
}void rellenaVector(char* nombreF, char* vector, int numeroPalabras){
FILE *f;
int lectura;
int lectura1;
char lectura2[TAM];
int i=0;
if((f=fopen(nombreF, "r"))==NULL){
fprintf(stderr, "\nError: no pudo abrirse fichero <%s>", nombreF);
exit(-1);
}
for(i=0;i<numeroPalabras;i++){
if(lectura=fscanf(f, "%d_%s", &lectura1, lectura2)==2){
strcpy(vector[i],lectura2);
printf("Palabra --> %s\n",lectura2);
}
}
fclose(f);
}