Прочитав ответ да / нет (строка с ans = getchar();
), вы прочитаете "y"
и "\n"
. Вы потребляете "y"
и обрабатываете его, но следующая итерация, когда вы читаете i = getchar();
, i
, потребляет оставшиеся "\n"
, поэтому сломает это do-while l oop.
Хотя это не мое любимое решение, простой обходной путь таков:
#include <stdio.h>
int main ()
{
int x;
char i, ans;
i = '\0';
do
{
i = '\0';
x=0;
printf("\nEnter sequence of character:");
do
{
i = getchar();
x++;
}
while(i!='\n');
printf("\nNumber of characters entered is: %d", --x);
printf("\nMore sequences (Y/N) ?");
ans = getchar();
getchar();
}
while(ans =='Y' || ans == 'y');
}
Так что просто используйте эти дополнительные "\n"
. Это будет работать, только если вы наберете "y"
, а затем "\n"
в терминале. Если вы введете какие-либо дополнительные символы, у вас будет неопределенное поведение.
Примечание. В вашей версии попробуйте ввести: "y1234"
, затем введите при появлении запроса, если вы хотите ввести снова. Вы увидите, что на самом деле вложенный do-while l oop работает и будет считать 4 символа после "y"
.