2016-08-06 52 views
0

Ich mache ein Programm in C, das die Anzahl der Buchstaben in jedem Wort einer Eingabe zählt und sie dann als Histogramm ausdruckt. Ich bin viel für Schleifen in diesem Programm, und ich erhalte die folgenden Fehler mit ihnen:Erhalte einen seltsamen Fehler mit meinen for-Schleifen in C

letter_size_chart.c:35:37: error: expected expression 
    for (i = maximum; i >= MIN_CHARS; --i) 
            ^
letter_size_chart.c:38:27: error: expected expression 
     for (j = MIN_CHARS; i <= MAX_CHARS; ++i) 
         ^
letter_size_chart.c:48:23: error: expected expression 
    for (i = MIN_CHARS; i <= MAX_CHARS; i++) 
        ^
letter_size_chart.c:50:23: error: expected expression 
    for (i = MIN_CHARS; i <= MAX_CHARS; i++) 
        ^
4 errors generated. 

Was in meinem Schleifen wird diesen Fehler verursacht? Hier ist mein Code:

/* 
    sorts input by size of words into a histogram 
*/ 

#define EOF -1 
#define MAX_CHARS 10 /* max number of chars allowed in a word */ 
#define MIN_CHARS 

#include<stdio.h> 
#include<ctype.h> 

int main() 
{ 
    int c, i, j, word_length, numbcountsize, maximum; 
    int numbcount[MAX_CHARS]; 
    word_length = 0; 

    while ((c = getchar()) != EOF) 
    { 
     if (isalpha(c)) 
      ++word_length; 
     else 
      if (word_length != 0) 
      { 
       ++numbcount[word_length - 1]; 
       word_length = 0; 
      } 
    } 

    maximum = numbcount[0]; 
    for (i = MIN_CHARS; i <= MAX_CHARS; i++) 
     if (numbcount[i - 1] > maximum) 
      maximum = numbcount[i]; 

    for (i = maximum; i >= MIN_CHARS; --i) 
    { 
     printf("%d |", i); 
     for (j = MIN_CHARS; i <= MAX_CHARS; ++i) 
     { 
      if (j >= i) 
       printf(" * "); 
      else 
       printf(" "); 
     } 
     printf("\n"); 
    } 
    printf(" | "); 
    for (i = MIN_CHARS; i <= MAX_CHARS; i++) 
     printf("_"); 
    for (i = MIN_CHARS; i <= MAX_CHARS; i++) 
     printf("%d\n", i); 
} 
+1

Sie nicht 'MIN_CHARS' als etwas definiert haben - Sie müssen eine Reihe nach' #define MIN_CHARS'. –

Antwort

1

Wenn Sie ein #define mit einem leeren String zu tun, das heißt

#define MIN_CHARS 

es sagt der Präprozessor entfernen alle Erwähnungen von MIN_CHARS aus dem Text des Programms. Ihre Schleife sieht folgendermaßen aus:

for (i =; i <= 10; i++) 

Das ist ungültig, so lehnt C-Compiler es ab.

Wert für MIN_CHARS Providing wird dieses Problem beheben:

#define MIN_CHARS 2