Código C:
Ver original
Quizás por los cambios que se han realizado en el estandar C11 ??
Si es así no se donde conseguir la información de este último estandar. He buscado sin éxito.
| |||
Contar carateres Estoy estudiando C con el libro "The C Programming Language", la segunda edición especificamente. Y alli se encuentra un ejercicio para contar los caracteres, y lo he copiado exactamente igual en el IDE (CodeBlocks), pero no funciona como lo dice el libro. Por qué?
Código C:
Ver original Quizás por los cambios que se han realizado en el estandar C11 ?? Si es así no se donde conseguir la información de este último estandar. He buscado sin éxito. |
| |||
Respuesta: Contar carateres Lo que hace el programa es contar la cantidad de caracteres que tiene la palabra que escribas. Es decir, al pedir la entrada, si escribes la palabra "sol" el programa dará una salida diciendo que tiene 3 carateres. Si escribes "tren" dirá que tiene 4 caracteres. El libro explicoa esto haciendo referencia al ejercicio anterior, que copia caracteres de la entrada a la salida, el cual es este: leer un caracter while (caracter no es igual a indicador end-of-file) imprimir el caracter leído leer caracter Convirtiendo esto a C, es:
Código C:
Ver original |
| ||||
Respuesta: Contar carateres hola amigo creo que lo querieres es esto no.
Código C:
Ver original bueno espero haberte ayudado. Saludos. Drewermerc. |
| |||
Respuesta: Contar carateres La revision C11 reemplaza la C99. Una lista de novedades: http://www.open-std.org/jtc1/sc22/wg...2013/n3631.pdf Referencia del estandar C11: http://www.open-std.org/jtc1/sc22/wg14/www/standards Otra version de la lista de modificaciones: http://blog.smartbear.com/codereview...r-programming/ Solo es cuestion de googlear C11; hay informacion de sobras, C aun no ha muerto. De todas formas si tu compilador lo soporta puedes indicarle que compile en una version u en otra. Saludos vosk |
| |||
Respuesta: Contar carateres Por cierto EOF en consola de windows es ctrl-z y representa el ascii -1. Luego el codigo de celtic7 si que funciona siguiendo alguna regla: el getchar estandar requiere enter para saber que terminaste de escribir; sabiendo que getchar solo recupera un caracter a la vez, sabiendo tambien que haces un ciclo para recuperar todos los caracteres, y sabiendo que no puedes concatenar el ctrlz a otros caracteres dentro del buffer de entrada (a menos que ctrl-z sea el primer caracter), el codigo funciona cuando escribes:
Código C:
Ver original Obtienes 5 caracteres: 'hola' + <enter>, el ultimo enter para aceptar ctrl-z se queda en el stdin. Aun asi tal como te comentaron yo tambien prefiero la version de @Drewermerc, donde usa un caracter concatenable como punto final, pero esto solo significa que la funcion del libro es poco amigable, no tiene nada que ver con la revision de C. Saludos vosk |
| ||||
Respuesta: Contar carateres Cita: Interesante lo del control+z eso no lo se :D y lo de c11 era otra cosa que no sabia jeje.ctrl-z Por supuesto que c no va a morir. Es duro como una roca. XD Ademas es un lenguaje que mientras menos le toquen mejor sera ^^. |
| |||
Respuesta: Contar carateres @vangodp "...Por supuesto que c no va a morir. Es duro como una roca..." Estoy de acuerdo :) Por cierto ctrl-z solo para windows, en linux es ctrl-c o no se que algo asi es cuestion de buscar. Saludos vosk |
| ||||
Respuesta: Contar carateres bueno solo agrego que para el final del archivo despues de precionar control+z se preciona enter para que funcione. y bueno vosk yo uso control+d en linux que yo se par control+c e para terminar procesos ya sea en windows o linux o ati si te funciona como EOF en linux. Saludos. Drewermerc. |
| |||
Respuesta: Contar carateres Si "Drewermerc", a eso me refería, muchas gracias. Poniendo aún más sencillo el código veo que puede funcionar sin la declaración "char c", y colocando solo "getchar() != '\n'" en el argumento de "while". Así estaría lo más cercano al ejercicio que está propuesto en el libro que estoy estudiando. En pocas palabras la única modificación para que funcione es cambiar "EOF" por "\n" en el argumento de while. Ya entiendo "vangodp" que el EOF se genera cuando finaliza un archivo de texto. Estaba muy confundido porque en el libro explica este ejercicio sin explicar cómo se usa el getchar para leer una entrada en forma de archivo. O será que cuando el autor escribió el libro, en esos tiempos al presionar ENTER equivalía a un EOF ? O será que el sistema operativo que el autor usaba funcionaba de esa forma? El libro se llama "El Lenguaje de Programación C", segunda y última edición, escrito por Brian Kernighan y Dennis Ritchie. Este libro fue escrito en el año 1988. Todos sabemos que Dennis Ritchie es el padre, creador de este lenguaje. Aquí en este enlace les dejo el fragmento del libro donde se encuentra mi duda, especificamente lo que dice el penúltimo párrafo: http://paste.ubuntu.com/7547072/ Con respecto a "vosk". No sabía lo de "CTRL + Z", y ciertamente funciona, pero para que me de el resultado correcto el valor de "nc" tendría que ser "-1" para que me ignore el último ciclo que hace por CTRL + Z. Es decir, ya van 2 soluciones, esta segunda es solo modificando en el código el valor de la inicialización de while de "0" a "-1". Ahora que dices que no se puede concatenar el "CTRL + Z" al último carácter, en ese fragmento del libro dice lo siguiente: "No se puede utilizar char puesto que c debe ser suficientemente grande como para mantener a EOF además de cualquier otro carácter. Por lo tanto se emplea int". Entonces ahí vuelvo a lo mismo, el autor (Dennis Ritchie) se está refiriendo solo al uso de getchar con un archivo como entrada, o se está refiriendo a la entrada por teclado? Si la respuesta es esté último, por qué a él el getchar si le generaba un EOF y a mi no? Será por el sistema operativo? O por el tipo de computadora que usaba? O será que estoy nadando en un vaso de agua y ya esto está resuelto? |
| ||||
Respuesta: Contar carateres hola amigo. bueno pues control+z al ingresarlo el programa lo interpreta como si fuera el EOF y bueno yo creo que tu libro se refiere a el final del archivo pero con un archivo. para que no te confundas loque puede hacer es crear un archivo .txt con un texto guardarlo en la carpeta donde esta tu programa y lo ejecutas asi. pero esto debe ser en la terminal (cmd). programa.exe < texto.txt y tu programa leera el archivo y te dira cuantos caracteres tiene hasta encontrar el EOF y terminar el programa . Saludos. Drewermerc. |
| ||||
Respuesta: Contar carateres getchar devuelve un EOF al terminar de leer esos char. ¿que es un EOF? Es un entero normalmente negativo pero puede variar de una funcion a otra. Con mis malabras es un algo parecido a return -1; por si no recuerdas las funciones retornan valores ... y la función getchar() sera algo parecido a eso:
Código C:
Ver original ...y solo lo retorna si se ha terminado los datos... ¿como lo hace?Pues mas o menos así:
Código C:
Ver original Pero en realidad el return lo hará así: return EOF; ¿Y como lo se? Por que soy Dennis Richards? jajaj es broma ...porque ese valor se puede imprimir. Esta definido dentro de stdio.h y se puede modificar haciendo un #define EOF <otroNumero>. Te voy enseñar 2 ejemplos, en ambos vamos imprimir el EOF y así ya se te va quitar las dudas :D El primero ejemplo va imprimir el EOF por defecto, y el segundo va imprimir un EOF modificado por nosotros. En ambos casos lo que quiero demostrar es el valor que tiene. Es como la constante PI que esta definida dentro de la librería math.h, se puede cambiar, por que por ejemplo PI viene definida asi: PI == 3.141231241542543523634254124º11º3º131º1 XDDDDDDDDDDD....... Y que pasa si no lo quiero tannn largo... pues que hago un #define PI 3.14 y ya ta XD Aquí va el primer XD
Código C:
Ver original como puedes ver es -1 creo XD (puede variar de un compilador a otro, yo uso mingw) El otro ejemplo modificamos el EOF para que sea 10 enves de -1 pero recuerda que 10 ya existe en la tabla asc2 y por eso se usan negativos... porque no hay valores negativos en dicha tabla, pero me da igual por que no voy usar ese EOF para nada XD.
Código C:
Ver original Bueno pues como puedes ver el EOF es simplemente es una marca que indica que ya no hay mas letras y es cuando rompe tu bucle, y cada función puede dejar una marca distinta. Lo que se intenta es que sea un entero ya que si fuera un char y padentro... XD Por eso EOF es un entero y no un char. Ahora volviendo a tu programa... tu bucle no se rompe mientras getchar no arroje el EOF (-1) que es esto while ( getchar() != EOF) o lo que es lo mismo while (getchar() != -1) Prueba lo :D Si me liado en algo no me peguéis , es solo corregidme y aprenderé también Espero que sirva para la duda y ¡Suerte! |
Etiquetas: |