Доброе утро, и все! В конце концов, это станет одним из таких ослепительно-простых вопросов, но для меня жизнь в тупике. Я выполняю некоторые упражнения на языке программирования C, и мне удалось написать некоторый код для инициализации цикла. После некоторого Googling я нашел лучшие способы инициализации цикла до 0, но я не понимаю, почему цикл, который я написал для этого, не заканчивается. Я использовал отладчик, чтобы узнать, что это потому, что переменная «c» никогда не достигает 50, она доходит до 49, а затем перекатывается до 0, но я не могу понять, почему она перевернулась. Код прилагается ниже, кто-нибудь знает, что здесь происходит?C петля не выйдет
#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(" ");
}
}
}
Обратите внимание на эту строку: 'while (c <51)'! – Till
Точка с запятой отсутствует после объявления 'int histogram [50] = {0}'. Поскольку вы инициализировали 'histogram' в объявлении, вам не нужно делать это снова в цикле, который должен проверять' c <50', а не 'c <51'. –
Никогда не перерабатывайте переменные. Сделайте свой охват локальным (маленьким), насколько это возможно, и объявите новые, когда это необходимо. Компилятор все равно оптимизирует это. – bitmask