Проблема в том, что ваш код не «запоминает» входные данные, которые вы дали в первом l oop (и не может в его нынешнем виде). Итак, после того, как вы закончили это l oop, ваш второй l oop хочет прочитать символы для b
(после того, как он выведет первое значение, которое запоминается из предыдущей строки b = c
).
Итак, после вывода 55
(целое число значение символа 7
) он ожидает дальнейшего ввода.
Вероятно, самый простой способ получить выход, который вы ищете, должен иметь массив входных символов. Затем вы можете вывести значения %c
по мере их чтения (как и раньше), а затем повторно запустить выходные данные в формате %d
в следующем for
l oop.
Здесь демонстрация, которая, как я думаю, вам нужна:
#include <stdio.h>
#define MAXINS 20 // Set to the maximum number of input characters you want to allow
int main()
{
int c[MAXINS];
int i = 0, n = 0;
c[0] = getchar();
while (i < MAXINS && c[i] != EOF && c[i] != 10) {
printf("%c", c[i]);
c[++i] = getchar();
++n;
}
printf("\n");
for (i = 0; i < n; ++i) {
printf("%d\t", (int)(c[i]));
}
return 0;
}
Не стесняйтесь просить дальнейших разъяснений и / или объяснений.
РЕДАКТИРОВАТЬ : по делу в вашем первом абзаце, «Но если я заменю его на printf («% d », c), это даст вывод gibberi sh.» Хорошо, когда я попробую следующий код и дам 783
и затем нажимаю return (который генерирует новую строку), я получаю ожидаемое 55565110
в качестве вывода:
int main()
{
int c;
c = getchar();
while (c != EOF) {
printf("%d", c);
c = getchar();
}
return 0;
}
Это может выглядеть как gibberi sh, но это точно такой же вывод, как и вы ' ожидайте 'в вашем последующем коде, но без пробелов и с добавлением 10
для новой строки.