Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
ichigo9911
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 7
#1

Функция scanf() неправильно работает - C++

26.02.2012, 20:32. Просмотров 1210. Ответов 7
Метки нет (Все метки)

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
int main()
{
    unsigned char c1, c2;
    bool b=true;
    while (b==true) 
    {
        printf("MAIN MENU\n");
        printf("l: left; r: right; q: quit\n");
        scanf("%c", &c1);
        switch (c1)
        {
            case 'q': printf("quiting menu...\n"); b=false; break;
            case 'l':
                {
                    printf("LEFT MENU\n");
                    printf("select a or b\n");
                    scanf("%c", &c2);
                    switch (c2)
                    {
                        case 'a': printf("you choose a\n"); continue;
                        case 'b': printf("you choose b\n"); continue;
                        default:  printf("you didnt choose a or b!\n"); continue;
                    }
                }
            case 'r': 
                printf("RIGHT MENU\n");
                printf("select c or d");
                scanf("%c", &c2);
                switch (c2)
                {
                    case 'c': printf("you choose c\n"); continue;
                    case 'd': printf("you choose d\n"); continue;
                    default:  printf("you didnt choose c or d!\n"); continue;
                }
            default: printf("you must type l or r or q!\n");
        }
    
    }
    
}
Запускаю отладчик, иду построчно, проблема возникает в case l. После выполнения строки scanf("%c", &c2), в переменную с2 записывается значение 10 ""(я так понимаю, 10й код в таблице ascii) без моего участия (т.е. я с клавиатуры ничего не ввожу). Не могу понять че за фигня...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2012, 20:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция scanf() неправильно работает (C++):

Неправильно работает функция - C++
void FreeTop( Tree *&amp;tree ) { if( tree-&gt;d == NULL )delete tree; else FreeTop( tree-&gt;d ); } это моя функция освобождения...

Неправильно работает функция - C++
You are given natural number n. Calculate 12+22+...+n2. Example Input Output 2 5 Добавлено через 1 минуту #include &lt;iostream&gt;...

Неправильно работает функция - C++
Проблема заключается в том, что в случае, если пользователь вводит числа от 1 до 9 все работает правильно, а если от 10 и далее, то...

Неправильно работает функция gets( ) - C++
..... char *str = new char; gets( str ); printf( &quot;%s&quot;, str ); .....

Неправильно работает функция - C++
Господа, написал следующий код, цель - заполнить имеющийся вектор структур данными из файла + вывести количество символа @ Проблема...

неправильно работает функция replace()? - C++
Нужно написать программу, которая заменяет в строке символ '/' на строку &quot;&quot;. Ниже дан цикл, в котором это происходит. Но замена почему-то...

7
Zhecky
19 / 19 / 2
Регистрация: 13.07.2011
Сообщений: 73
26.02.2012, 20:39 #2
Если Windows 7, то иногда спасает запуск с правами администратора.
0
ichigo9911
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 7
26.02.2012, 20:43  [ТС] #3
А если windows xp? Откуда эта ошибка берется?)
0
easybudda
Модератор
Эксперт CЭксперт С++
9664 / 5614 / 952
Регистрация: 25.07.2009
Сообщений: 10,778
26.02.2012, 20:43 #4
Цитата Сообщение от ichigo9911 Посмотреть сообщение
в переменную с2 записывается значение 10 ""(я так понимаю, 10й код в таблице ascii)
Он же символ перевода строки, оставшийся в потоке ввода после чтения предыдущего значения.

Цитата Сообщение от Zhecky Посмотреть сообщение
Если Windows 7, то иногда спасает запуск с правами администратора.
Хоть с правами системного сервиса какого-нибудь, это тут ни каким боком. В *NIX так же всё будет.
0
Zhecky
19 / 19 / 2
Регистрация: 13.07.2011
Сообщений: 73
26.02.2012, 20:53 #5
Цитата Сообщение от easybudda Посмотреть сообщение
Он же символ перевода строки, оставшийся в потоке ввода после чтения предыдущего значения.
Действительно, 13 берется а 10 убегает.


Цитата Сообщение от easybudda Посмотреть сообщение
Хоть с правами системного сервиса какого-нибудь, это тут ни каким боком. В *NIX так же всё будет.
Ну не говорите. С getch() всегда проблемы были. Программа консольная, при запуске начинала бесится, будто зажата какая-то клавиша. Если с правами администратора, то работала как нужно.

Добавлено через 3 минуты
К стати, вместо
C
1
scanf("%c", &c1);
можете использовать
C
1
с1 = getch();
Тогда энтер не нужен. А если и нужен, то читать его нужно дважды.
Или проверить, если прочитанный код равен 13, то прочитать еще раз холостым getch();
0
ichigo9911
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 7
26.02.2012, 21:01  [ТС] #6
а как сделать, чтоб все работало правильно?
0
zss
Модератор
Эксперт С++
6404 / 5970 / 1945
Регистрация: 18.12.2011
Сообщений: 15,401
Завершенные тесты: 1
26.02.2012, 21:14 #7
Введите символ повторно, т.е. продублируйте строку
scanf("%c", &c2);
0
Zhecky
19 / 19 / 2
Регистрация: 13.07.2011
Сообщений: 73
26.02.2012, 21:23 #8
Цитата Сообщение от ichigo9911 Посмотреть сообщение
а как сделать, чтоб все работало правильно?
Попробуйте использовать getch();
Там enter нажимать не нужно, сработает сразу после нажатой вами буквы.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2012, 21:23
Привет! Вот еще темы с ответами:

Неправильно работает функция CArray.Add() - C++
Вобщем вызываю CellAr.Add(DictCell(&quot;sda&quot;,823)) но в сам массив записывается объект созданный конструктором без параметров, хотя через...

Почему функция atanh работает неправильно? - C++
Задание http://content-15.foto.my.mail.ru/mail/megabayt_m/_answers/i-359.jpg Кусок кода for (double X = Xn; X &lt;= Xk; X += dX) { ...

Неправильно работает функция string::find_last_of - C++
include &lt;stdio.h&gt; #include &lt;string&gt; using namespace std; int main () { string temp= &quot;undefined reference to&quot;; size_t...

Не работает функция синус и неправильно выводятся числа - C++
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; #include &lt;iomanip&gt; #include &lt;math.h&gt; #define MAX_RAND 0x7fff ...


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
26.02.2012, 21:23
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru