Ayuda comenzando en C

Xustis

Hice un programa que consistía en contar los caracteres hasta alcanzar el segundo punto:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int numcarac=0;
    char sent;
    char letra;
    while((letra=getchar())!='.' )
    {
                                 numcarac++;
    }
    while((letra=getchar())!='. ' )
    {
                                 numcarac++;
   
} printf("el numero de caractares es %dn",numcarac); system("pause" ); return 0; }

Pero ahora me piden realizar lo mismo, pero hasta que el segundo punto esté en posición par y por mucho que lo intento no hay manera, me vendría bien una ayuda.

DaRk-eXe

yo haría un bucle tal que así:

char* frase;
int punto=0;
int numcarac=0;
while (( frase[numcarac]!="\n" )&&( punto!=2 )) {
     if (( frase[numcarac]=="." )&&( numcarac % 2 ))
         punto++;
     numcarac++;
}

printf("Encontrado el segundo punto en la posición: %d",numcarac);

Hace mucho que no toco C, si hay algun error de sintaxis.. mil perdones :(

edit: ah perdon.. se me olvido lo de la posicion par. un seg. DONE.

#3 thx, lo edito.

3 respuestas
elkaoD

#2 MOD es % en C

1 respuesta
Xustis

#2 Muchas gracias, pero podrias explicarme que hace el "frase[numcarac]"?

1 respuesta
DaRk-eXe

#4 char* frase es la frase en la que tienes que buscar los puntos, y se trata como un vector, es decir, puedes acceder a cada letra dada su posicion mediante el operador [], ejemplo:

char* frase = "hola. y adios.";

frase[0] devolvería "h"

frase[4] devolvería "."

frase[5] devolveria " " (un espacio).

pues vas comprobando letra por letra mediante numcarac toda la frase y buscando puntos.

pd: todas las cadenas de caracteres creo que por defecto añaden al final el \n que es el retorno de carro y es lo que indica que se ha llegado al final de la cadena.

1 respuesta
Xustis

#5 oks gracias, me lo has dejado bien claro.

B

#2: No es mejor iterar hasta '\0' ?

#8: Hasta donde yo sé, el '\0' era el final de cadena.

1 respuesta
DaRk-eXe

#7 siempre lo he hecho con \n pero no recuerdo bien el orden si escribía \n\0 o \0\n

1 respuesta
Lecherito
#include <stdio.h>
#include <stdlib.h>
int main() {
    int numcarac=0;
    char letra;
    int punto = 0;
    while((letra=getchar()) != EOF) {
        mumcarac++;
        if (punto%2 == 0) {
            printf("el numero de caractares es %dn",numcarac);
            break;
        }
        if (letra == '.') { punto++; }
    }
    system("pause" );
    return 0;
}
1 respuesta
Uriel246

Es \0 , \n es el retorno de carro

3 1 respuesta
skv

Como dice #10 es \0, eso indica el final de la cadena en C. Puede haber cadenas sin \n al final (la mayoría de hecho si no se leen de un fichero linea a linea).

1
DaRk-eXe

#9

       if (letra == '.') { punto++; }
        else { mumcarac++; }

en este bucle.. si encuentra punto, no suma carácter, con lo cual al terminar el bucle tendría caracteres de menos. (y si el if/else solo contiene 1 linea, no es necesario el { } )

        if (punto%2 == 0) {
            printf("el numero de caractares es %dn",numcarac);
            break;
        }

Si he entendido bien el ejercicio.. el punto tiene que estar en posición par, no que haya 2 puntos.

y sobre el break.. nunca te enseñaron que en la programación estructurada los breaks son el demonio?

#13 si, si tienes razon en lo del { }, solo lo puntualizaba, y sobre los breaks no digo que no sean útiles, es solo que en la carrera les faltaba pegarme con una vara si veían uno (salvo en los cases) xDD

1 respuesta
Lecherito

#12 Ya esta cambiado, de todas maneras no especificaba si había que sumar el punto o no.

Si el if o el el else solo tienen una linea por comodidad les pongo los {}, si quieres a alguien que está aprendiendo le acortas el if o lo que sea, para que lo entienda peor.

Lo segundo llevas razón, estaba para el segundo punto, pero ya está cambiado, además de que los break; son útiles a su manera.

2 respuestas
BLZKZ

#13 en un bucle de ese tipo no es necesario el break, de hecho si te acostumbras a usarlos es posible que alguna vez te vuelvas loco en la depuración.

1 respuesta
Lecherito

#14 Nunca los uso, pero para ejemplos/bucles ultra sencillos a mi los break me han venido de lujo.

Usuarios habituales