Tema destacado: Nueva página de elhacker.net en Google+ 
Autor
|
Tema: Duda en C nivel básico. (Leído 868 veces)
|
Jukuqs
Desconectado
Mensajes: 73
|
Pues mirad gente, he estado haciendo programas que incluyan cada una de los (¿comandos?) basicos de C, para tener donde consultar y los estoy guardando por nombre, (por cierto, pronto los colgaré en el foro como ejemplos para la gente que empiece, si eso) bueno, eso que estoy guardandolos con el source y el .exe al ladito, y intentaba hacer un ejemplo que incorporara estructuras y arrays peeero, tengo un problema con esto: #include <stdio.h> #define CONT 99 struct lenguages{ char nombre[20]; char portable[2]; float nota; }; struct lenguages lenguage[99];
int main() { int cont; cont = 0; int contdef; contdef = 99; while(cont<CONT&&contdef==99){ printf( "Escribe el nombre del lenguaje: " ); fflush( stdout ); scanf( "%s", &lenguage[cont].nombre ); printf( "Es %s portable <si/no> ? ", lenguage[cont].nombre ); fflush( stdout ); scanf( "%s", &lenguage[cont].portable ); printf( "Escribe la nota del lenguage <1-10> : " ); fflush( stdout ); scanf( "%f", &lenguage[cont].nota ); cont++; char salir; printf( "Deseas terminar de introducir lenguages <s/n> ? " ); scanf("%s", &salir); if(salir=='s'){ contdef=0; } } cont-1; while(cont>-1){ printf( "\n%s %s es portable y tiene un %f de nota.", lenguage[cont].nombre, lenguage[cont].portable, lenguage[cont].nota); cont=cont-1; } return 0; } Notas: Trabajo con ubuntu linux, compilo con GCC y lo que intento hacer es un programa que te pida informacion sobre lenguages de programación hasta que le digas que no quieres introducir mas, entonces que te dé toda la información recogida anteriormente y luego salga. Muchas gracias de antemano  .
|
|
|
|
|
En línea
|
|
|
|
^Tifa^
Desconectado
Mensajes: 2.802
|
Yo me pregunto como haz podido compilar  Ando un poco rapido y no puedo explicarte... ya quisiera  pero ciertamente, hay cosillas en ese codigo que buehhh... no estan muy bien organizadas. #include <stdio.h> #include <assert.h> #include <stdlib.h> #define CONT 99
typedef struct { char nombre[20]; char portable[2]; float nota; } lenguages;
int main(lenguages lenguage) { FILE *archivo;
archivo = fopen("log.txt", "aw"); assert(archivo);
int cont; for (cont = 0; cont < CONT; cont ++) { printf( "Escribe el nombre del lenguaje: " ); scanf( "%s", &lenguage.nombre ); fflush( stdout ); printf( "Es %s portable <si/no> ? ", lenguage.nombre ); scanf( "%s", &lenguage.portable ); fflush( stdout ); printf( "Escribe la nota del lenguage <1-10> o salir <0>: " ); scanf( "%c", &lenguage.nota ); fflush( stdout ); fputs("\n", archivo); fputs(lenguage.nombre, archivo); fputs("\n", archivo); fputs(lenguage.portable, archivo); if (lenguage.nota == 0) { exit(1); } } return 0; }
Mas o menos... esto podria servirte de ejemplo.
|
|
|
|
|
En línea
|
|
|
|
Jukuqs
Desconectado
Mensajes: 73
|
Muchissimas gracias, me sacas de un problema, pero me introduces funciones que nu queria poner aún >.< . Pero vamos, eso en un plis se arregla, lo dicho, muchas gracias por todo, miraré a ver en que fallé, el codigo se lee muy bien  . Gracias! EDITO: Pequeño error en el scanf de la nota, que escaneabas char en vez de float. EDITO2: Perfecto, de paso edito el "esfanebas" xD. EDITO3: Problemas, ahora me compila, y el programa "funciona" peero hay un problema en el log.txt, cuando le digo delphi y sus datos me da esto: Delphi no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no 0 no delphi si Solo he introducido un lenguage. -.-'' Saludos y gracias de antemano. (Soyun negado  )
|
|
|
|
« Última modificación: 25 Abril 2008, 22:26 por Ashran »
|
En línea
|
|
|
|
Flakito81
Desconectado
Mensajes: 508
|
Version 2.0 de tu codigo #include <stdio.h> #include <assert.h> #include <stdlib.h> #define CONT 3 typedef struct { char nombre[20]; char portable[2]; float nota; } lenguages; int main(lenguages lenguage) { FILE *archivo; int i; lenguages *ptrLang; archivo = fopen("log.txt", "aw"); assert(archivo); //introduciendo datos en el fichero for (i = 0; i < CONT; i++) { printf( "Escribe el nombre del lenguaje: " ); scanf( "%s", ptrLang->nombre ); fflush( stdout ); printf( "Es %s portable <si/no> ? ", ptrLang->nombre ); scanf( "%s", ptrLang->portable ); fflush( stdout ); printf( "Escribe la nota del lenguage <1-10> " ); scanf( "%f", &ptrLang->nota ); fflush( stdout ); fwrite( ptrLang, sizeof(lenguages), 1, archivo ); } fclose(archivo); //-- Visualizando contenido del fichero if((archivo = fopen("log.txt", "r")) == NULL) { printf ("ERROR: al abrir el fichero para lectura"); return 1; } fread(ptrLang,sizeof(lenguages),1,archivo); while(!feof(archivo)) { printf ("\n%s %s %5.2f", ptrLang->nombre, ptrLang->portable, ptrLang->nota); fread(ptrLang,sizeof(lenguages),1,archivo); } fclose(archivo); return 0; } Como puedes observar se graba en binario (cuando abras el fichero veras caracteres raros) Si Quieres grabarlo en modo texto lee los datos y son fprintf construye la cadena que kieras grabar. fprintf (archivo, "%s %s %2.2f\n", ptrLang->nombre, ptrLang->portable, ptrLang->nota); Por supesto si cambias al modo texto no te servirá el codigo para visualizar que te he puesto. Un saludo!
|
|
|
|
|
En línea
|
|
|
|
^Tifa^
Desconectado
Mensajes: 2.802
|
Se me olvido poner fclose Dios mio !!!  No se como pude obviarlo, lol.... se quedo chupando ram la aplicacion lo siento  Aunque desconozco, porque se te guardo el 'log.txt' de la manera que lo hizo, continuo el Bucle .... esto mas sin embargo no me ocurre en Linux con Gcc, pero en fin. Como te explique, postee un poco rapido... y no es que sepa mucho C como me gustaria  sobretodo porque encuentro que C es tan 'logica matematica' y me cuesta sobremanera desarrollar mi area matematica, tengo enorme facilidad en sacar sobre 90 en cualquier materia, menos en Matematicas o Fisica  aqui siempre saco maximo 85 si es que llego por lo general siempre es sobre 70  Flakito81 Mil gracias por la correcion a mi codigo, Un beso encanto  aunque no te lo diga, admiro mucho tus respuestas sobre C o C++, ya quisiera yo tener tu nivel en C. Y Ashran,  espero que tus dudas hayan sido resueltas.
|
|
|
|
« Última modificación: 26 Abril 2008, 14:16 por ^TiFa^ »
|
En línea
|
|
|
|
Jukuqs
Desconectado
Mensajes: 73
|
Todo resuelto, un placer ;P . Intentaré por eso adaptar los códigos a mi nivel que esto me queda un poco lejos XD.
Muchas graciaaas!
|
|
|
|
|
En línea
|
|
|
|
|
|