Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
2 / 2 / 1
Регистрация: 03.11.2014
Сообщений: 129
1

Разобраться с getchar

12.10.2016, 20:42. Показов 1991. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, у меня в этой функции действие одного getchar залезает на действие другого. Код ниже. В первом гетчар мы получаем 2 символа 'o' и '\n'. И потом идет проверка на '\n' и мы не попадаем во второй цикл. Как решить такую проблему? Может что то вместо гетчар использовать? Заранее спасибо.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    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';         
            }
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2016, 20:42
Ответы с готовыми решениями:

Getchar()
#include <stdio.h> #include <string.h> int main (void) { freopen("input.txt", "r" ,stdin); //...

Getchar();
Наткнулся в интернете на интересную строчку: int c; while ((c = getchar()) != EOF) ...

Про getchar
Не совсем понимаю как работает эта функция. Есть код (1.13 K&R): #include <stdio.h> int main()...

Функция getchar()
Помогите не могу понять как выполнить это задание ----Внесите изменения в программу, чтобы для...

8
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
12.10.2016, 20:53 2
Лучший ответ Сообщение было отмечено sky123 как решение

Решение

Цитата Сообщение от sky123 Посмотреть сообщение
while ((u = getchar()) != '\n'
Замена на scanf() или getline() не годится?
1
48 / 48 / 57
Регистрация: 25.11.2015
Сообщений: 140
12.10.2016, 20:58 3
Лучший ответ Сообщение было отмечено sky123 как решение

Решение

Попробуй поменять условие во втором while...замени '\n' на EOF
1
2 / 2 / 1
Регистрация: 03.11.2014
Сообщений: 129
12.10.2016, 21:20  [ТС] 4
Hikari, при использовании scanf нельзя ввести сразу всё слово. Есть какой нибудь другой вариант?

Добавлено через 12 минут
LaFayette, вроде не помогает. Добавил вот такое в код, но хочется красивей сделать.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    char k = 'a';
    while (k != 'r' || k != 'o')
    {
        printf("\nDo you want random or your own key? Press r or o:\n");
        k = getchar();             
            if (k == 'o')          
            {
                puts("\nVvedite key.");
                char u;
                int b = 0;
                u = getchar();  //вот
        char dfg = u;   //вот
                while ((u = getchar()) != '\n')  
                    key[b++] = u;
                key[b++] = '\0';         
            }
    }
0
45 / 45 / 40
Регистрация: 31.08.2015
Сообщений: 147
12.10.2016, 21:28 5
Зачем переменная dfg?
1
2 / 2 / 1
Регистрация: 03.11.2014
Сообщений: 129
12.10.2016, 21:37  [ТС] 6
IVAN1234, просто чтобы туда '\n' записать, который нам мешается на следующей проверке.
0
45 / 45 / 40
Регистрация: 31.08.2015
Сообщений: 147
12.10.2016, 21:39 7
sky123, Вам нужен символ '\n'?
1
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
12.10.2016, 22:04 8
Цитата Сообщение от sky123 Посмотреть сообщение
при использовании scanf нельзя ввести сразу всё слово.
getline() в классическом Си есть?
Если есть (вроде есть) - используй.
1
48 / 48 / 57
Регистрация: 25.11.2015
Сообщений: 140
13.10.2016, 07:49 9
Лучший ответ Сообщение было отмечено sky123 как решение

Решение

Цитата Сообщение от sky123 Посмотреть сообщение
вроде не помогает
Странно...у меня все работает...

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#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;
}
после ввода key нужно набрать комбинацию ENTER + ( Ctrl + z ) или ( Ctrl + d )
1
13.10.2016, 07:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2016, 07:49
Помогаю со студенческими работами здесь

Getchar в условии while
Всем доброго здравия. Помогите пожалуйста разобраться как работает функция getchar в условии цикла...

Использование getchar()
Только начал учить C,не понимаю в чем проблема,или я просто не понял смысл функции?

Не работает getchar()
Почему не работает getchar() и проверка? #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include...

Прервать getchar
Добрый день. Использование getchar() не подходит, т.к нужно еще раз нажимать Enter.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru