Domanda

Sono un n00b totale C cercando di insegnare a me stesso C off K & R. La mia domanda è sorta di imbarazzante elementare. OK, ecco qui: non riesco a programmi utilizzando getchar per dare il tipo di output che mi aspettavo. Se vi capita di avere K & R a portata di mano, mi sono bloccato su esercizio 1.13. La domanda va, "Scrivere un programma per stampare un istogramma delle lunghezze delle parole nel suo input." E non riesco nemmeno a contrastare la versione orizzontale a causa di questo problema che sto avendo.

Sono su XP utilizzando Dev-C ++ (compilatore MinGW) e l'esecuzione di programmi al largo della linea di comando. Il mio problema è, quando si tenta di eseguire il mio programma, mi aspetta per inserire i caratteri per la scansione da, ma quando ho finito l'inserimento e premere Invio, non fa niente . Mi aspetto di andare avanti e stampare l'istogramma come mi aspettavo. In realtà, non sembra nemmeno contare fino lunghezze di parola, perché come si può vedere nel codice, quando provo a stampare ciò che è nella matrice ctr solo per vedere se contiene qualche cosa, la stampa non viene.

Sono così n00b che non ho idea se è il mio codice o la riga di comando che è in difetto. Ma ho il sospetto che sia qualcosa con il sistema, perché quando provo a compilare ed eseguire un modello di programma , la stessa cosa accade. Digitare di ingresso, premere Invio, non succede nulla. Se io Ctrl-C, a volte sputa fuori un asterisco o due che sembra niente come l'output del modello. Altre volte, non fa nulla (appena risale proprio al prompt).

Ecco il mio codice per l'esercizio. Ho passato un giorno intero su questo e sto mettendo in dubbio la mia capacità di portare avanti con la programmazione. Mi piacerebbe davvero, davvero grato se qualcuno mi potesse uscire da questo buco!

Inoltre, ho un'altra domanda sul modello di programma che ho citato sopra, ma penso che dovrei postare nella sua stessa domanda. Grazie a tutti:)

#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;
}
È stato utile?

Soluzione

Il ciclo while è alla ricerca di EOF che sta per fine del file-, non fine-of-line.

Su Windows, è necessario digitare Ctrl-Z per simulare end-of-file.

Altri suggerimenti

Non sembra come si sta in realtà la memorizzazione c (l'input) da nessuna parte ... né stamparlo. Si sta stampando la dimensione della stringa, ma non i caratteri effettivi. Se il CTR [i] = c; da qualche parte (che è si aggiunge il carattere a matrice), e quindi stampare l'array, vedrete il vostro input. Oh, e sì, la risposta su Ctrl-Z è anche importante. Inoltre, se siete totalmente nuovo per la lingua, vorrei vivamente di mettere tra parentesi intorno al vostro contenuti po '. Sta andando un po 'prima si può solo sguardo al codice e sapere che cosa cadere nella competenza del ciclo while e ciò che non sarà se non si dispone di parentesi graffe intorno ad esso.

Non ho visto nulla di veramente sbagliato con il codice, quindi ho caricato sotto gcc e sembra funzionare bene, purché si ricordi che bisogna mettere in un EOF (CTRL-D) per terminare la while. Entrai 4 linee e mentre io non posso fare alcuna dichiarazione in merito alla correttezza delle risposte, ogni volta che mi ha colpito entrare ho avuto una serie di numeri pari al numero di caratteri sono entrato, seguito da uno spazio. Questo è esattamente ciò che il codice dice di fare.

Quando sono entrato il CTRL-D, ho ricevuto le informazioni di riepilogo. Ancora una volta, non ho intenzione di fare alcuna dichiarazione circa la correttezza della produzione, ma ho fatto ottenere due sezioni principali, come descritto nel codice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top