Problema en C

Bueno me vais a perdonar si no es del todo el sitio idoneo, pero como realmente donde programo es en linux, pues vamos que lo meto aqui :P .

Bueno resulta que tengo un bucle while y dentro pido cadenas de texto con fgets(arra,1000,stdin); , bien lo que tengo intencion es que al darle a Ctrl+D parar el bucle while, la verdad me trae loco, dado que vi una tabla de ascii por internet y kme decia que el valor era 0x04 para Ctrl+D pero claro ... eso en windows hice un showkey -s y me sale 0x1d 0x20 0xa0 0x9d :D una gran diferencia, con lo cual no sabria como hacerlo exactamente, ni la condicion a poner para el while ni nada.

Venga un saludo
Ctrl-D si no recuerdo mal manda una señal al proceso, así que tendrás que hacer el trap de la señal para matar al hilo/proceso que contiene el while

Salu2.Ferdy
Ferdy el problema de eso es que aun a tanto no llegue :P y no se si habra una forma mas "chapuza" de hacerlo .... porque la practica tengo qu eentregarla mañana, a ver si a alguien se le ocurre una idea.

Un Saludo
Pues yo juraria que CTRL+D es un EOF (end of file).

Saludos
Raharu tienes razon, es mas puse en el while una condicion de getchar!=EOF y lo hace bien, escepto porque se come un caracter de cada cadena qde texto que le meto xDDDDD ( era evidente ) pero no se si hay alguna sentencia mejor que el getchar para hacer eso, venga un saludo
Si lo quieres meter todo en una cadena, podrías hacer algo así, porque con un fgets no se la verdad como controlar un EOF.

for(i=0, ch='a'; ch!=EOF || icad[i]='\0'; //Ahora no recuerdo si EOF era lo mismo que el \0

Creo que lo he dejado algo lioso, pero te servirá para practicar fors recargados xD

Saludos
Oooooooops, Ctrl-C = SIGUSR1... sorry

Salu2.Ferdy
Sin ser ningún lumbreras en c, yo intentaría algo así:

#define MAXX 10
#define MAXY 100

int main(void) {
   
   int i=0,j=0;
   int c;
   char cad[MAXX][MAXY];
   
   while((c=getchar())!=EOF && j<MAXX) {
      if(c=='\n') {
         ++j;
         i=0;
         continue;
      }
      if(i<MAXY)
         cad[j][i++]=c;
      else
         cad[j][i]='\0';
   }
   
}
7 respuestas