Pregunta

Soy un n00b C total tratando de enseñar a mí mismo A apagado K & R. Mi pregunta es una especie de embarazosa primaria. OK, aquí va: No puedo obtener programas utilizando getchar para dar el tipo de salida que esperaba. Si le sucede que tiene K & R en la mano, estoy atascado en el ejercicio 1.13. La pregunta va, "Escribir un programa para imprimir un histograma de las longitudes de las palabras en su entrada." Y ni siquiera puede hacer frente a la versión horizontal debido a este problema que estoy teniendo.

Estoy en XP utilizando Dev-C ++ (compilador MinGW) y programas fuera de la línea de comandos se ejecuta. Mi problema es que cuando trato de ejecutar mi programa, me espera para introducir caracteres que deben analizarse a partir, pero cuando he terminado de introducir y pulsa intro, no hace lo . Espero que siga adelante e imprimir el histograma como lo esperaba. En realidad, ni siquiera parece contar hasta longitudes de palabra, ya que como se puede ver en el código, cuando trato de imprimir lo que hay en la matriz ctr sólo para ver si contiene nada, no se imprime nada.

Estoy tan n00b que no tengo ni idea de si es mi código o la línea de comandos que es la culpa. Pero sospecho que es algo con el sistema, porque cuando intento compilar y ejecutar un programa modelo , sucede lo mismo. Tipo de entrada, pulse Enter, no pasa nada. Si Ctrl-C, a veces escupe un asterisco o dos que parece en nada a la salida del modelo. Otras veces, no hace nada (solo se remonta al indicador).

Aquí está mi código para el ejercicio. He pasado un día entero en esto y estoy cuestionando mi capacidad de continuar con la programación. Yo realmente, realmente apreciaría si alguien pudiera sacarme de este agujero!

Además, tengo otra pregunta sobre el programa modelo que he mencionado anteriormente, pero creo que debería publicar en su propia pregunta. Gracias a todos:)

#include <stdio.h>

//#define 1 IN
//#define 0 OUT
int main () {
    //start w/ state = OUT
    int c = 0;
//    int state = OUT;
    int len = 0;
    int ctr[12];
    int i, j;
    i = j = 0;

    for (i = 0; i <12; i++)
        ctr[i] = 0;
    while ((c = getchar()) != EOF)
       if (c != ' ' && c != '\t' && c != '\n') {
//            state = IN;
            len++;
            printf("%d", len);
            }
       else {
            ctr[len]++;
            len = 0;
            }            
    for (i = 0; i <12; i++) 
        printf("%d\n", ctr[i]);
    for (i = 0; i <12; i++) {
        printf("%d\n", i);   
        for (j = 0; j <= ctr[i]; j++)
            printf("-");
        printf("\n");
        }
    return 0;
}
¿Fue útil?

Solución

Su bucle while está buscando EOF que significa archivo de fin de, no termina de línea.

En Windows, es necesario pulsar Ctrl-z para simular de fin de archivo.

Otros consejos

No se ve como si estuviera realmente almacenar c (la entrada) en cualquier lugar ... ni imprimirlo. Que va a imprimir el tamaño de la cadena, pero no los personajes reales. Si CTR [i] = c; en alguna parte (eso es que añadir el carácter a la matriz), y luego imprimir la matriz, usted verá su entrada. Ah, y sí, la respuesta sobre ctrl-z también es importante. Además, si usted es totalmente nuevo para el idioma, yo le insto encarecidamente a poner entre paréntesis alrededor de su contenido mientras. Va a ser un tiempo antes de que pueda solo vistazo al código y saber qué va a caer en el ámbito de competencia del bucle while y qué no, si usted no tiene apoyos en torno a él.

Yo no vi nada realmente mal con el código, así que cargué en el marco de gcc y parece que funciona muy bien, siempre y cuando usted recuerde que usted tiene que poner en un EOF (CTRL-D) para terminar la mientras bucle. Entré en 4 líneas y si bien no puedo hacer ninguna declaración sobre la exactitud de las respuestas, cada vez que pulsa enter Tengo una serie de números iguales al número de caracteres que ha introducido, seguido de un espacio. Esto es exactamente lo que dice el código para hacerlo.

Cuando entré en el CTRL-D, me dio la información de resumen. Una vez más, no voy a hacer ninguna declaración sobre la corrección de la salida, pero me hizo llegar dos secciones principales, como se describe en el código.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top