2009-09-11 11 views
-2

je courais le code suivant, mais rien ne vint sur la console ....histogramme d'affichage de la console

#include <stdio.h> 

#define MAXWORDLEN 10 

int main(void) 
{ 
    int c; 
    int inspace = 0; 
    long lengtharr[MAXWORDLEN + 1]; 
    int wordlen = 0; 

    int firstletter = 1; 
    long thisval = 0; 
    long maxval = 0; 
    int thisidx = 0; 
    int done = 0; 

    for(thisidx = 0; thisidx <= MAXWORDLEN; thisidx++) 
    { 
    lengtharr[thisidx] = 0; 
    } 

    while(done == 0) 
    { 
    c = getchar(); 

    if(c == ' ' || c == '\t' || c == '\n' || c == EOF) 
    { 
     if(inspace == 0) 
     { 
     firstletter = 0; 
     inspace = 1; 

     if(wordlen <= MAXWORDLEN) 
     { 
      if(wordlen > 0) 
      { 
      thisval = ++lengtharr[wordlen - 1]; 
      if(thisval > maxval) 
      { 
       maxval = thisval; 
      } 
      } 
     } 
     else 
     { 
      thisval = ++lengtharr[MAXWORDLEN]; 
      if(thisval > maxval) 
      { 
      maxval = thisval; 
      } 
     } 
     } 
     if(c == EOF) 
     { 
     done = 1; 
     } 
    } 
    else 
    { 
     if(inspace == 1 || firstletter == 1) 
     { 
     wordlen = 0; 
     firstletter = 0; 
     inspace = 0; 
     } 
     ++wordlen; 
    } 
    } 

    for(thisval = maxval; thisval > 0; thisval--) 
    { 
    printf("%4d | ", thisval); 
    for(thisidx = 0; thisidx <= MAXWORDLEN; thisidx++) 
    { 
     if(lengtharr[thisidx] >= thisval) 
     { 
     printf("* "); 
     } 
     else 
     { 
     printf(" "); 
     } 
    } 
    printf("\n"); 
    } 
    printf("  +"); 
    for(thisidx = 0; thisidx <= MAXWORDLEN; thisidx++) 
    { 
    printf("---"); 
    } 
    printf("\n  "); 
    for(thisidx = 0; thisidx < MAXWORDLEN; thisidx++) 
    { 
    printf("%2d ", thisidx + 1); 
    } 
    printf(">%d\n", MAXWORDLEN); 

    return 0; 
} 
+1

quel compilateur utilisez-vous? Quelle erreur obtenez vous? –

+1

Où voyez-vous que ceci n'est pas autorisé? Quel standard? –

+0

Je note cela parce que c'est une question vraiment incohérente. Avec un peu de travail, je pense que cela pourrait être une bonne question. –

Répondre

3

getchar est toujours un entier par le POSIX and C standards. Avez-vous oublié d'inclure stdio.h ou d'inclure quelque chose qui le redéfinit? Cet exemple fonctionne pour moi:

#include <stdio.h> 
int main() 
{ 
    int c; 
    c = getchar(); 
} 
0

Je suis curieux de savoir si vous voulez dire getch() comme étant un problème.

4 il y a mths il y avait une discussion sur getch() qui peuvent être utiles: getch is deprecated

Dans le second est suggéré getchar() réponse, donc il ne faut pas renvoyer une erreur, mais aussi dépend du compilateur que vous utilisez.

1

getchar() est une fonction macro. Peut-être que vous avez manqué le bon fichier d'inclusion.

Dans une pincée,

#ifndef getchar 
#define getchar() getc(stdin) 
#endif 
+0

N'est-ce pas 'fgetc'? – strager

+0

@stragler, selon le livre de K & R, les deux existent. – Joshua

1

http://codepad.org/Fp8kmzbv

Il compile et fonctionne très bien @codepad. Quel est votre compilateur, vos options de compilation, et comment l'exécutez-vous?

Et en cours d'exécution sur ma machine à la maison:

$ gcc-trunk --version 
gcc-trunk (GCC) 4.5.0 20090907 (experimental) 

$ gcc-trunk -Wall -ansi -Wall -W -pedantic tt.c 
tt.c: In function ‘main’: 
tt.c:73:5: warning: format ‘%4d’ expects type ‘int’, but argument 2 has type ‘long int’ 

$ ./a.out 
This is a test of your histogram program. 
    3 |   * 
    2 | *  * 
    1 | * *  *   * * 
     +--------------------------------- 
     1 2 3 4 5 6 7 8 9 10 >10 

Il devrait encore faire ce que vous voulez qu'il fasse, en supposant que vous utilisez correctement (comme une application de la console dans une console).

0

peut-être vous devez appeler fflush (stdout) à la fin de votre programme pour vider la sortie de la console.

Questions connexes