Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.95/20: Рейтинг темы: голосов - 20, средняя оценка - 4.95
grayscale
1 / 1 / 2
Регистрация: 12.04.2013
Сообщений: 34
#1

Scanf не работает дважды

12.04.2013, 22:08. Просмотров 3795. Ответов 5
Метки нет (Все метки)

Вот и я решил завести аккаунт на этом форуме, т.к. часто выручает в случае каких-либо передряг и казусов в работе с С. Но не в этом суть
Казалось бы, простая вещь, но почему-то во второй раз scanf уже не срабатывает. Сталкиваюсь уже не раз, как-то не придавал значения, т.к. использую в основном потоковый I/O.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main()
{
    char x,z;
    int y,w;
    printf("Enter the initial coordinates: ");
    scanf("%c %d",&x,&y);
    printf("Enter the final coordinates: ");
    scanf("%c %d",&z,&w);
    printf("%c %c",x,z);
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2013, 22:08
Ответы с готовыми решениями:

Из вводимых строк найти слова, у которых заданный символ встречается дважды - Не работает scanf
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include &lt;ctype.h&gt;...

Scanf читает данные дважды
помогите найти проблемы в коде. отрывок кода должен считывать координаты...

Не работает scanf
#include &lt;stdio.h&gt; int main() { char c; int d; ...

Не работает scanf
Здравствуйте! Необходимо описать массив структур и реализовать 4 функции:...

Функция scanf() не работает
Здравствуйте, помогите решить проблему с функцией scanf(); Она не принимает...

5
gazlan
3139 / 1915 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
13.04.2013, 01:52 #2
В первый раз читается часть потока, "хвост" остается. Во второй раз вы начинаете чтение с этого "хвоста".
Используйте связку: gets/sscanf для чтения полной строки.
1
Charles Kludge
Клюг
7641 / 3156 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
13.04.2013, 09:42 #3
fflush(stdin); перед вторым scanf'ом будет нагляднее.
0
kotleta
43 / 43 / 17
Регистрация: 13.09.2012
Сообщений: 196
13.04.2013, 11:17 #4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main()
{
    char x,z;
    int y,w;
    printf("Enter the initial coordinates: ");
    scanf("%c",&x);
    fflush(stdin);
    scanf("%c",&z);
    printf("%c %c",x,z);
    return 0;
}
Вот так например
Когда вы прочитали первый символ в потоке остался символа перевода строки (10 код)
И этот символ хавается переменной z
функция fflush очищает поток от лишних символов
поэтому когда вы вызываете scanf второй раз есть возможность прочитать второй символ

Добавлено через 1 минуту
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
int main()
{
    char x,z;
    int y,w;
    printf("Enter the initial coordinates: ");
    scanf("%c%c",&x,&z);
 
    if(z == 10)
    {
        printf("a"); // выведет а, потому в z засунулся символ перевода строки, он невидимый (т.к. называемый whitespace character)
    }
 
    printf("%c %c",x,z);
    return 0;
}
1
Charles Kludge
Клюг
7641 / 3156 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
13.04.2013, 11:30 #5
BTW, всего этого можно избежать, если поменять местами аргументы у scanf();
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main()
{
    char x,z;
    int y,w;
    printf("Enter the initial coordinates: ");
    scanf("%d %c",&y,&x);
    printf("Enter the final coordinates: ");
    scanf("%d %c",&w,&z);
    printf("%x %x",x,z);
    return 0;
}
Так как %d успешно проигнорирует не-цифру.
1
grayscale
1 / 1 / 2
Регистрация: 12.04.2013
Сообщений: 34
13.04.2013, 13:38  [ТС] #6
Спасибо за ответы с fflush(stdin) не сработало. Поменять координаты местами - сработало. Также все нормально работает с чтением из файла.
Оставил с чтением из файла в общем..
0
13.04.2013, 13:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2013, 13:38

Функция scanf не работает
Возникает проблема, что функция scanf не работает. Скрин: Можно как-нить...

Scanf работает через раз
Подскажите, почему в 42 строчке scanf пропускается? #include &lt;stdio.h&gt;...

Не понимаю как работает scanf
Здравствуйте, вот код программы. При работе программы второй scanf...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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