Разобраться с getchar - C (СИ)
Формулировка задачи:
Добрый день, у меня в этой функции действие одного getchar залезает на действие другого. Код ниже. В первом гетчар мы получаем 2 символа 'o' и '\n'. И потом идет проверка на '\n' и мы не попадаем во второй цикл. Как решить такую проблему? Может что то вместо гетчар использовать? Заранее спасибо.
char k = 'a';
while (k != 'r' || k != 'o')
{
printf("\nDo you want random or your own key? Press r or o:\n");
k = getchar(); //тут мы получается получаем 2 символа 'o' и '\n'
if (k == 'o') //здесь срабатывает 'o'
{
puts("\nVvedite key.");
char u;
int b = 0;
while ((u = getchar()) != '\n') //здесь '\n' и мы не попадаем в этот цикл.
key[b++] = u;
key[b++] = '\0';
}
}Решение задачи: «Разобраться с getchar»
textual
Листинг программы
#include <stdio.h>
int main( void )
{
char k, u;
int key[5] = { 0 }, b = 0;
while ( k != 'r' && k != 'o' )
{
printf("\nDo you want random or your own key? Press r or o:\n");
k = getchar(); //тут мы получается получаем 2 символа 'o' и '\n'
if (k == 'o') //здесь срабатывает 'o'
{
puts("\nVvedite key.");
while ((u = getchar()) != EOF ) // EOF = Ctrl + z (Win) or Ctrl + d ( Linux / Mac OS )
key[b++] = u;
key[b++] = '\0';
}
}
return 0;
}
Объяснение кода листинга программы
- Указываем язык программирования — C.
- Задаем задачу — разобраться с функцией getchar.
- Объявляем переменные: — char k, u; — int key[5] = { 0 }, b = 0;
- Входим в цикл while, который выполняется до тех пор, пока символ, считанный функцией getchar(), не будет равен 'r' или 'o'.
- Выводим сообщение с предложением выбрать тип ключа.
- Считываем символ, который является либо 'o', либо не является 'o' или 'r'.
- Если считанный символ равен 'o', то выполняем следующие действия: — Выводим сообщение с просьбой ввести ключ. — Входим в цикл while, который считывает символы и добавляет их в массив key до тех пор, пока не будет достигнут конец файла (EOF).
- Добавляем символ '\0' в конец массива key.
- Повторяем шаги с 4 по 8, пока не будет считан символ 'r'.
- Завершаем программу возвратом 0 из функции main.