Ayuda con una cosita de C

quiero hacer que me lea de un achivo hasta que se encuentre ::::
por ejemplo: " hola me llamo marcos::::perro " aqui deberia leer solo "hola me llamo marcos"
el caso es que como lo he hecho con que se encuentre 2 puntos solo ya deja de leer y tiene que ser cuando haya 4.
a ver si me podéis ehar una mano
gracias
while  ((descripcion[n]!=':')&&(descripcion[n-1]!=':')&&(descripcion[n-2]!=':')&&(descripcion[n-3]!=':'))
{
fscanf(sec,"%c",&descripcion[n]);
n++;
}
while  (!((descripcion[n]=':')&&(descripcion[n-1]=':')&&(descripcion[n-2]=':')&&(descripcion[n-3]=':')))
{
fscanf(sec,"%c",&descripcion[n]);
n++;
}


No lo he probado, pero creo que asi tendria que funcionar. Es hacer una and positiva en cada miembro y luego negarlo todo junto.
seria poniendo ==, no? iwalmente me sale un error :S pero viene a ser lo mismo que yo había puetos no se ...
Fíjate dónde metes los caracteres leídos y qué caracteres compruebas.

Por ejemplo, si n=7, metes en descripcion[7] el caracter leído, aumentas n (n=8), se empieza nueva iteración y compruebas que descripcion[8] no sea igual a ':', cuando el caracter que has leído lo has metido en la posición 7.

Es decir, que, si no me equivoco, iría así:

while  ((descripcion[n-1]!=':')&&(descripcion[n-2]!=':')&&(descripcion[n-3]!=':')&&(descripcion[n-4]!=':'))
{
   fscanf(sec,"%c",&descripcion[n]);
   n++;
}


ó (con los cambios oportunos en el resto del código)

while  ((descripcion[n]!=':')&&(descripcion[n-1]!=':')&&(descripcion[n-2]!=':')&&(descripcion[n-3]!=':'))
{
   n++;
   fscanf(sec,"%c",&descripcion[n]);
}
poniendo eso me pasa lo mismo que antes, que con que se encuentre ':' ya deja de leer, y yo necesito que sean '::::'
Ah vale, ya entiendo el problema. En el condicional tienes que usar OR en vez de AND.
lo clavaste ahi! XD
gracias de nuevo!!
markmakanudo escribió:seria poniendo ==, no? iwalmente me sale un error :S pero viene a ser lo mismo que yo había puetos no se ...


Si, es con ==, se me ha pasado XD.

No es lo mismo hacer la negacion de cada miembro a hacer la negacion de todo. Y la solucion de negar cada uno y hacer una OR equivale a lo que he puesto (Leyes de De Morgan).

De todas formas me alegro de que lo hayas solucionado. ;)
7 respuestas