C/Visual C - Ayuda programa C++

 
Vista:
sin imagen de perfil

Ayuda programa C++

Publicado por Christian Marcelo (3 intervenciones) el 07/09/2014 03:32:00
Hola, soy nuevo, queria pedirles ayuda, quizas alguien me puede ayudar...

tengo este programa en c, alcompilar me tira un error, no se porque :c
este es el codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
 
#define MAX_SIMBOLOS 50
#define MAX_CARACT_ENTRADA 80
#define MAX_ESTADOS 50
 
 
main(int argc, char *argv[]){
	FILE *archivo;
	char alfabeto[MAX_SIMBOLOS];
	char numero_estados[MAX_ESTADOS];
	char estado_inicial[MAX_ESTADOS];
	char cant_estados_finales[MAX_ESTADOS];
	char estados_finales[MAX_ESTADOS];
	char arreglo[MAX_ESTADOS];
	int i;
	int pos;
 
	if (argc!=2) {
		printf("Uso correcto: %s nombre-archivo-automata\n", argv[0]);
		exit(EXIT_FAILURE);
	}
	//if (archivo==NULL) {
	  // printf("Error abriendo el archivo %s\n", argv[1]);
	//   exit(EXIT_FAILURE);
   //}
 
	archivo = fopen(argv[1], "r");
 
	fgets(alfabeto, MAX_SIMBOLOS, archivo );
	printf("%s", alfabeto);
	fgets(numero_estados, MAX_ESTADOS, archivo );
	printf("%s", numero_estados);
	fgets(estado_inicial, MAX_ESTADOS, archivo );
	printf("%s", estado_inicial);
	fgets(cant_estados_finales, MAX_ESTADOS, archivo );
	printf("%s", cant_estados_finales);
	fgets(estados_finales, MAX_ESTADOS, archivo );
	printf("%s", estados_finales);
 
 
// MATRIZ
 
 
	while (pos<MAX_ESTADOS){
		fgets(arreglo[pos], MAX_ESTADOS, archivo);
		pos+=1;
	}
	for (i=0; i<MAX_ESTADOS; i++){
		printf("%c", arreglo[i]);
	}
 
 
}

y este es el error:

1
2
3
4
5
6
7
8
9
10
christian@christian-RV410-RV510-S3510-E3510:~/Escritorio$ gcc prueba.c -o prueba
prueba.c: In function ‘main’:
prueba.c:49:3: warning: passing argument 1 of ‘fgets’ makes pointer from integer without a cast [enabled by default]
   fgets(arreglo[pos], MAX_ESTADOS, archivo);
   ^
In file included from prueba.c:1:0:
/usr/include/stdio.h:622:14: note: expected ‘char * __restrict__’ but argument is of type ‘char’
 extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
              ^
christian@christian-RV410-RV510-S3510-E3510:~/Escritorio$

OJALA ME PUEDAN AYUDAR, SOY NUEVO PROGRAMANDO.
Gracias...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda programa C++

Publicado por Chema (234 intervenciones) el 07/09/2014 10:49:52
gcc prueba.c -o prueba -lm


int main(int argc, char *argv[]){


return 0
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda programa C++

Publicado por Capitan Kirk (97 intervenciones) el 07/09/2014 14:49:27
fgets(arreglo[pos], MAX_ESTADOS, archivo);

fgets espera como primer argumento un puntero. Puedes pasar arreglo (el nombre de un array es un puntero al primer elemento), pero estás pasando arreglo[pos], que es un char. Ese es el motivo del warning que te está tirando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda programa C++

Publicado por Christian Marcelo (3 intervenciones) el 07/09/2014 18:48:40
Si, logro entender el error, pero mi duda es como podría guardar el resto de lineas que queda en el txt en un solo arreglo, mi txt consta de 9 lineas, pero las primeras 5 ya las guarde en las variables anteriores, y las 4 lineas faltantes quisiera guardarlas en la variable arreglo.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda programa C++

Publicado por Capitan Kirk (97 intervenciones) el 08/09/2014 08:02:43
Necesitarás un arreglo de caracteres por cada línea en el archivo. Si conoces de antemano el número de líneas que contiene tu archivo, puedes declarar un arreglo bidimensional:

1
2
3
4
char Arreglo[NUM_LINEAS][MAX_LONGITUD_LINEA];
 
for (i=0; i<NUM_LINEAS; i++)
    fgets(Arreglo[i], MAX_LONGITUD_LINEA, archivo);

Ahora, Arreglo es un arreglo bidimensional de caracteres, cada Arreglo[i] es un arreglo de caracteres, y cada Arreglo[i][j] será un carácter.

Si no conoces de antemano el tamaño del archivo, y quieres leerlo entero en un arreglo, ya tendrías que meterte con asignación dinámica de memoria. Antes de entrar en ese campo, debes tener perfectamente dominado el manejo de arreglos y punteros.

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar