Я - полный C n00b, пытающийся научить себя C от K & R. Мой вопрос довольно смущающий элементарно. Хорошо, здесь идет речь: я не могу получить программы, использующие getchar для выдачи ожидаемого результата. Если у вас есть K & R под рукой, я застрял в упражнении 1.13. Вопрос звучит так: «Напишите программу для печати гистограммы длин слов в ее входных данных», и я даже не могу заняться горизонтальной версией из-за этой проблемы, с которой я столкнулся.
Я использую Dev-C ++ (компилятор mingW) на XP и запускаю программы из командной строки. Моя проблема в том, что когда я пытаюсь запустить свою программу, она ждет ввода символов для сканирования, но когда я заканчиваю ввод и нажимаю Enter, она не делает что-либо . Я ожидаю, что это пойдет и напечатает гистограмму, как я ожидал. В действительности, он даже не подсчитывает длины слов, потому что, как вы можете видеть в коде, когда я пытаюсь распечатать то, что находится в массиве ctr, просто чтобы посмотреть, содержит ли оно что-нибудь, ничего не печатает.
Я настолько n00b, что понятия не имею, виноват ли мой код или командная строка. Но я подозреваю, что это что-то с системой, потому что когда я пытаюсь скомпилировать и запустить модель программы , происходит то же самое. Введите ввод, нажмите Enter, ничего не происходит. Если я Ctrl-C, иногда он выплевывает звездочку или два, которые не похожи на вывод модели. В других случаях он ничего не делает (просто возвращается к приглашению).
Вот мой код для упражнения. Я потратил на это целый день и сомневаюсь в своей способности заниматься программированием. Я бы очень, очень признателен, если бы кто-нибудь смог вытащить меня из этой дыры!
Кроме того, у меня есть еще один вопрос о модельной программе, о котором я упоминал выше, но я думаю, что я должен опубликовать его в своем собственном вопросе. Спасибо всем:)
#include <stdio.h>
//#define 1 IN
//#define 0 OUT
int main () {
//start w/ state = OUT
int c = 0;
// int state = OUT;
int len = 0;
int ctr[12];
int i, j;
i = j = 0;
for (i = 0; i <12; i++)
ctr[i] = 0;
while ((c = getchar()) != EOF)
if (c != ' ' && c != '\t' && c != '\n') {
// state = IN;
len++;
printf("%d", len);
}
else {
ctr[len]++;
len = 0;
}
for (i = 0; i <12; i++)
printf("%d\n", ctr[i]);
for (i = 0; i <12; i++) {
printf("%d\n", i);
for (j = 0; j <= ctr[i]; j++)
printf("-");
printf("\n");
}
return 0;
}