Question

Je suis un n00b total C en essayant de me enseigner K & C HF R. Ma question est un peu honteusement élémentaire. OK, ici goes: Je ne peux pas obtenir des programmes utilisant getchar pour donner le type de sortie que je m'y attendais. Si vous arrive d'avoir K & R à la main, je suis coincé sur l'exercice 1,13. La question va, « écrire un programme pour imprimer un histogramme des longueurs de mots dans son entrée. » Et je ne peux pas aborder même la version horizontale à cause de cette question que je vais avoir.

Je suis sur XP en utilisant Dev-C ++ (compilateur MinGW) et l'exécution des programmes de la ligne de commande. Ma question est, quand je tente d'exécuter mon programme, il attend pour moi d'entrer des caractères à numériser à partir, mais quand je suis fait entrer et appuyez sur Entrée, il ne fait pas quoi que ce soit . Je pense à aller de l'avant et d'imprimer l'histogramme comme je m'y attendais. En réalité, il ne semble même pas compter jusqu'à des longueurs de mots, parce que vous pouvez voir dans le code, lorsque je tente d'imprimer ce qui est dans le tableau de ctr juste pour voir si elle contient quelque chose, rien ne se imprime.

Je suis tellement n00b que je ne sais pas si c'est mon code ou la ligne de commande qui est en faute. Mais je pense qu'il est quelque chose avec le système, parce que lorsque je tente de compiler et exécuter un programme modèle , la même chose se produit. Tapez entrée, appuyez sur Entrée, rien ne se passe. Si je Ctrl-C, parfois il recrache un astérisque ou deux qui ne ressemble en rien la sortie du modèle. D'autres fois, il ne fait rien (va juste revenir à l'invite).

Voici mon code pour l'exercice. J'ai passé une journée entière à ce sujet et je questionne ma capacité à poursuivre la programmation. Je voudrais vraiment, vraiment apprécier si quelqu'un pouvait me sortir de ce trou!

En outre, j'ai une autre question sur le programme modèle je l'ai mentionné ci-dessus, mais je pense que je devrais le publier dans sa propre question. Merci à tous:)

#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;
}
Était-ce utile?

La solution

Votre boucle while recherche EOF qui signifie en fin de fichier, pas de bout de ligne.

Sous Windows, vous devez taper ctrl-z pour simuler la fin de fichier.

Autres conseils

Il ne ressemble pas à vous stockez en fait c (votre entrée) partout ... ni l'imprimer. Vous imprimez la taille de la chaîne, mais pas les caractères réels. Si vous Ctr [i] = c; quelque part (que vous est d'ajouter le caractère au tableau), puis imprimer le tableau, vous verrez votre entrée. Oh et oui, la réponse sur ctrl-z est également important. En outre, si vous êtes totalement nouveau pour la langue, je ne saurais trop vous demander instamment de mettre entre parenthèses autour de votre contenu while. Ça va être un certain temps avant de pouvoir tout coup d'œil sur le code et de savoir ce qui va tomber dans le champ de la boucle while et ce ne sera pas si vous n'avez pas des accolades autour.

Je ne voyais vraiment rien de mal avec le code, donc je l'a chargé sous gcc et il semble fonctionner très bien, aussi longtemps que vous rappeler que vous devez mettre dans un EOF (CTRL-D) de mettre fin à la tandis que la boucle. Je suis entré dans 4 lignes et alors que je ne peux pas faire des déclarations au sujet de l'exactitude des réponses, chaque fois que je rentre je me suis frappé d'une série d'un nombre égal au nombre de caractères je suis entré, suivi d'un espace. Ceci est exactement ce que votre code dit de faire.

Quand je suis entré dans le CTRL-D, je suis l'information sommaire. Encore une fois, je ne vais pas faire des déclarations au sujet de l'exactitude de la sortie, mais j'ai eu deux grandes sections comme décrit dans votre code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top