Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - alvr

#1
Yo suelo utilizar un while() de esta forma:



fin = fscanf(archivo, "%d", &numero);

while(fin != -1) {

    //tu codigo
    fin = fscanf(archivo, "%d", &numero);

}



Con fin lo que haces es obtener el número de datos leídos, en este caso sería uno, ya que solo hay un %d. Cuando fscanf no encuentra más datos que escanear devuelve el valor -1, por eso el ciclo se repite hasta llegar al final.
#2
Buenas, tengo un problema con una práctica que he de hacer, y no me sale por más que lo intento.

La idea sería esta:
CitarPlanteamiento general:
Leer el fichero,  creando los subvectores  nombres y goles, además de obtener el número de jugadores que han marcado. Para ello:
   Iniciar variables
   Leer numero de goles (fin = fscanf...)
   Mientras no sea fin de fichero (fin!=EOF)
      Leer tantos nombres como numero de goles (for)
fscanf (Fich, "%s", jugador);/*dependerá de los identificadores declarados*/
         y para cada nombre leído:
         Buscarlo en el vector de nombres
Si ya existe ese nombre incrementar el numero de goles marcados por ese jugador en 1
Si no existe ese nombre, insertarlo al final del vector nombres y anotarle en el vector de goles el gol marcado (no olvidar incrementar numElem en 1)

      Leer numero de goles de la siguiente jornada

   Escribir resultados:
   Recorrer subvectores (for desde 0 hasta numElem-1)
      Escribir nombres y goles

Y hay que utilizar al menos las siguientes funciones:
Citarint iguales (char c1[M], char c2[M]);
/*retorna 1 si las cadenas c1 y c2 son iguales y 0 en otro caso*/

int buscar (char jugador[M], char nombres [N][M], int numElem);
/*busca el nombre jugador en el subarray de nombres, retornando la posición en la que lo encuentra, en caso de no encontrarlo retorna el valor numElem*/

En resumidas cuentas, se abre un fichero, en una cadena se guardan los goles y en otra los goleadores. Si un jugador ya había marcado un gol, sumarle otro.

De momento este es el código que tengo:

#include <stdio.h>
#define N 30
#define M 25
#define JORNADAS 38

int iguales(char c1[M], char c2[M]);
int buscar(char jugador[M], char nombres[N][M], int numElem);

void main() {

char nombres[N][M];
int goles[JORNADAS];
char letra;

int fin;
int i=1, j, k; //variables para ciclos

FILE *archivo;
archivo = fopen("goles.txt", "r");

    fin = fscanf(archivo, "%d", &goles[i]);

while(fin != EOF) {


        for(j=0;j<goles[i];j++) {

            fscanf(archivo, "%s", nombres);

        }

        fin = fscanf(archivo, "%d", &goles[i+1]);

        i++;

}

}

int iguales(char c1[M], char c2[M]) {

int iguales, i = 0;

while (c1[i] != '\0' && c2[i] != '0' && c1[i] == c2[i]) i++;

iguales = (c1[i] == c2[i]);

return iguales;

}

int buscar(char jugador[M], char nombres[N][M], int numElem) {



}
#3
Intenta hacer esto a ver si se soluciona: http://stackoverflow.com/a/338412
#4
leosansan, no pide lo mismo, pero gracias de todas formas.

Al final he empezado de nuevo y parece que funciona bien. Aquí dejo el código por si alguno le resulta útil en un futuro.

#include <stdio.h>

int esMayus(char c);


void main() {

char letra;
int l1, l2, l3, enc = 0;

printf("Escribe una secuencia de texto: ");
scanf("%c", &letra);

while(letra != '.' && enc == 0) {

if(esMayus(letra) == 1) {

l1 = 1;
scanf("%c", &letra);

if(esMayus(letra) == 1) {

l2 = 1;
scanf("%c", &letra);

if(esMayus(letra) == 1 && l2 == 1) {

l3 = 1;
scanf("%c", &letra);
enc = 1;

}

}

} else {

scanf("%c", &letra);

}

}

if(l1 == l2 && l2 == l3) printf("Tres mayusculas consecutivas.");
else printf("No hay tres mayusculas consecutivas.");

}

int esMayus(char c) {

if(c >= 'A' && c <= 'Z') return 1;
else return 0;

}
#5
Gracias por la ayuda leosansan pero necesito que compruebe que hay tres mayúsculas seguidas, y por el código que has enviado cuenta las mayúsculas que hay incluso estando separadas.
#6

Hola, tengo que hacer un programa en el que se escriba la frase y detecte si hay tres mayusculas consecutivas mediante una función. Aquí dejo el enunciado.

CitarSe introduce por teclado un texto que acaba en un punto. Escribir un programa que nos indique si existen tres letras mayúsculas consecutivas en el texto. Para resolver el problema realizar una función EsMayusc que a partir de un carácter nos devuelva un 1 si el carácter es alfabético mayúscula y devuelva un 0 en cualquier otro caso. No deberán leerse más datos que los necesarios.

Y aquí dejo el código que tengo hasta ahora, pero que claramente no funciona:

#include <stdio.h>

int esMayus(char c);

void main() {

char letra;

printf("Escribe una secuencia de texto: ");
scanf("%c", &letra);

while(letra != '.') {

if(esMayus(letra) == 1) {

scanf("%c", &letra);

if(esMayus(letra) == 1) {

scanf("%c", &letra);

if(esMayus(letra) == 1) {

printf("Encontrado.");

}

}

}

scanf("%c", &letra);

}

}

int esMayus(char c) {

if(c >= 'A' && c <= 'Z') return 1;
else return 0;

}