Использование функции getchar ()

я использовал getchar() остановить строку while. Моя проблема заключается в том, что она останавливает строку while, если я набираю один или два символа, если пользовательский ввод больше двух символов, ничего не происходит.

вот код:

printf("enter srting\n");

while ((tmp=getchar()) !='\n') { \\here is my problem

count_letters++;
/* COUNTING WORD THAT START WITH LETTES L,A,C,H */

while (count_letters%3==0) {
switch (tmp) {
case 'A': count_a++;
break;
case 'C': count_c++;
break;
case 'H': count_h++;
break;
case 'L': count_l++;
default:
break;
}
} /* end of count letters while  */

n1=n2;
n2=n3;
n3=tmp;

if (n1=='H' && n2=='Y' && n3=='A') {
count_hya++;
}} /* end of getchar while */
printf("\n");

printf("%d", count_letters);

0

Решение

  1. Я верю, что это твой код:
    «while (count_letters% 3 == 0))» что-то не так!
  2. потому что, когда вы набираете более трех букв, ваша переменная «count_letters» будет добавлена ​​к 3 из-за кода: «count_letters ++;».
  3. Может быть, вы могли бы изменить «время» на «если» и посмотреть, работает ли он правильно ~
1

Другие решения

Вот проблема:

while (count_letters%3==0) {
switch (tmp) {
case 'A': count_a++;
break;
case 'C': count_c++;
break;
case 'H': count_h++;
break;
case 'L': count_l++;
default:
break;
}
}

когда ваш третий символ читается, ваша программа входит в бесконечный цикл из-за (count_letters% 3 == 0)

Я не могу понять цель вашего кода.
Я предлагаю использовать функции get () и манипуляции со строками, потому что вы обрабатываете всю строку. (см. string.h)

getchar () также менее эффективен по сравнению с get () + for-loop

0