Guten Morgen ein und alles! Dies wird im Nachhinein eine dieser blendend einfachen Fragen sein, aber für das Leben von mir bin ich ratlos. Ich gehe einige der Übungen in der Programmiersprache C durch und habe es geschafft, Code zu schreiben, um eine Schleife zu initialisieren. Nach etwas Googeln habe ich bessere Möglichkeiten gefunden, eine Schleife auf 0 zu initialisieren, aber ich verstehe nicht, warum die Schleife, die ich geschrieben habe, nicht fertig ist. Ich habe den Debugger verwendet, um herauszufinden, dass es daran liegt, dass die c-Variable niemals 50 erreicht, sondern 49 erreicht und dann auf 0 rollt, aber ich kann nicht herausfinden, warum sie rollt. Der Code ist unten angehängt, weiß jemand, was hier vor sich geht?C-Schleife wird nicht beendet
#include <stdio.h>
#define IN 1
#define OUT 0
/* Write a program to print a histogram of the lengths of words in
itsinput. */
main()
{
int c=0;
int histogram[50]={0}
int current_length=0;
int state=OUT;
//Here we borrow C so we don't have to use i
printf("Initializing...\n");
while(c<51){
histogram[c] =0;
c=c+1;
}
c=0;
printf("Done\n");
while((c=getchar()) != EOF){
if((c==32 || c==10) && state==IN){
//End of word
state=OUT;
histogram[current_length++];
}else if((c>=33 && c<=126) && state==OUT){
//Start of word
state=IN;
current_length=0;
}else if((c>=33 && c<=126) && state==IN){
//In a word
current_length++;
} else {
//Not in a word
//Example, " " or " \n "
;
}
}
//Print the histogram
//Recycle current_length to hold the length of the longest word
//Find longest word
for(c=0; c<50; c++){
if(c>histogram[c])
current_length=histogram[c];
}
for(c=current_length; c>=0; c--){
for(state=0; state<=50; state++){
if(histogram[c]>=current_length)
printf("_");
else
printf(" ");
}
}
}
Beachten Sie diese Zeile: 'while (c <51)'! – Till
Ein Semikolon fehlt nach der Deklaration 'int histogram [50] = {0}'. Da Sie 'histogram' in der Deklaration initialisiert haben, müssen Sie dies nicht erneut in der Schleife tun, die nach' c <50', nicht nach 'c <51' suchen soll. –
Verwerten Sie niemals Variablen. Machen Sie ihren Bereich so lokal wie möglich (klein) und deklarieren Sie bei Bedarf neue. Der Compiler wird dies trotzdem optimieren. – bitmask