Этим постом открываю цикл "Язык С и Linux".
По книге было задание: самому написать программу (консольную), которая будет рисовать вертикальную гистограмму из длин введенных слов. Я состряпал такую вот программу, она честно выполняет заданное (но ограничения: символов в слове до 20, а слов до 15 штук.)
#include <stdio.h>
int main()
{
int c, s, i, nw, n, w;
nw = 0; /*считает количество слов*/
int symb[20]; /*считает кол-во символов в словах*/
for (w=0; w<15; ++w) /*обнуляет переменные массива*/
symb[w] = 0;
s = 1;
while ((c = getchar()) != '*')
{
if (c == ' ' || c == '\n')
{
if(s == 1)
++nw;
++s;
}
else
{
s = 1;
++symb[nw];
}
}
printf("\n\n***КОЛИЧЕСТВО БУКВ В СЛОВАХ***\n\n");
printf("Символ| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\n");
for (n = 1; n<= 20; ++n)
{
printf("%2d ", n); /*возвращает номер символа в слове*/
for (i=0; symb[i] <= 15; ++i)
{
if(symb[i] >= n)
printf("| "); /*рисует гистограмму*/
else
printf(" "); /*или не рисует*/
}
putchar('\n');
}
return 0;
}Если "просканировать" текст программы, можно заметить:
int symb[20]; /*считает кол-во символов в словах*/
почему, ведь слов должно быть 15!?
Потому что если тут изменить "20" на "15", то вот какой вывод:
freemaster@freePC:~/Документы/gcc$ ./a.out qwerqwuriuwey euiryweiury uiywi ru weroier wer * ***КОЛИЧЕСТВО БУКВ В СЛОВАХ*** Символ| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 | | | | | | | | | 2 | | | | | | | | | 3 | | | | | | | | 4 | | | | | | | 5 | | | | | | | 6 | | | | | | 7 | | | | | 8 | | | | 9 | | | | 10 | | | | 11 | | | | 12 | | | 13 | | | 14 | | 15 | | 16 17 18 19 20
В конце непонятно зачем появляется вот такая-вот дребедень!
Если здесь
int symb[20];
оставить 20, то все проходит ОК!
Думайте.... Лично я не врубаюсь почему так...


Комментарии
Re: Язык "С" и Linux. --- 1. Программа-мистика.
Александр...
Прошу прощения. Я не знаком с "С" - абсолютно. Когда - то встречал аналогичную задачу в "Basic"...
Но, вряд - ли тут присутствует мистика. Знаете, я бы озадачил "Google". Я, тоже когда-то ( с трудом вериться) был студентом, но тогда была ЭВМ "Минск 32", перфолента и время после полуночи для желающих реализовать свой реальный диплом и творческие возможности.
Re: Язык "С" и Linux. --- 1. Программа-мистика.
Просто не представляю как это сделать... Или не научился гуглить мож быть...
Отправить комментарий