При использовании scanf()
и getchar()
вам обычно приходится нажимать клавишу [return] после требуемой клавиши. И требуемый ключ, и ключ возврата (обычно) помещаются в поток stdin. Код вопроса не учитывал это. Следовательно, первый требуемый ключ был прочитан scanf()
и сохранен в num
, но оставил ключ возврата '\n'
в буфере;который затем был прочитан getchar()
и сохранен в c
. Следовательно, критерии выхода из цикла были выполнены, и программа завершилась.
Каким-то образом код, чтобы быть функциональным, должен прочитать нежелательный ключ возврата '\n'
, оставленный после вызова scanf();
и, возможно, также дляgetchar()
.
Возможно, что-то вроде:
#include <stdio.h>
#include <ctype.h>
int main()
{
int num;
int c;
char cr[2];
printf("Enter number: \n");
scanf("%d%1[\n]", &num, cr); // Reads %d into num, and garbage '\n' into cr.
printf("Enter a string : \n");
while((c = getchar()) != '\n')
{
if(isdigit(c))
putchar(c);
else
putchar(c + num);
getchar(); // Reads garbage '\n' from previous getchar()
}
printf("\n");
return 0;
}