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

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

Войти
Регистрация
Восстановить пароль
 
[WRG]
50 / 50 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
#1

чтение строк, scanf() - C++

04.02.2013, 21:43. Просмотров 709. Ответов 8
Метки нет (Все метки)

Код
scanf("%20s", str1);
такой код считает первые 20 символов, введенных с клавиатуры в переменную str1.
если сразу после этого запустить вот это
Код
scanf("%s", str2)
то в переменную str2 попадет все, что осталось после чтения 20и символов в переменную str1.
как сделать чтобы после чтения 20 символов ничего не оставалось, сразу можно было считывать свежевведённую строку?

З.Ы. можно ли вобще использовать printf и scanf в c++ программах? позволяет ли такое хороший тон программирования? или всё же нужно по каким-то причинам использовать cout и cin?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dr.Urban
63 / 58 / 7
Регистрация: 14.12.2011
Сообщений: 193
04.02.2013, 21:48     чтение строк, scanf() #2
fflush(stdin);
[WRG]
50 / 50 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
04.02.2013, 22:31  [ТС]     чтение строк, scanf() #3
не, не работает, пробовал. сишные функции не связаны с потоками ввода и вывода c++ или не?

Добавлено через 32 минуты
нашел решение
Код
scanf("%20s%*s", str);
по идее должен считывать после считывания 20 символов все остальные и никуда их не записывать, таким образом введенная строка читается полностью.
но есть одна проблемка, программа ведет себя некорректно, если введенная строка короче чем 20 символов, и программа ждет еще чего то на ввод, ведь %*s ничего не досталось, когда вся строка влезла в str. помогите разобраться как быть.
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
04.02.2013, 22:45     чтение строк, scanf() #4
[WRG], использовать можно, но это не приветствуется. Это равносильно тому, что если бы у Вас в гараже стоял мерседес, а вы бы на работу ездили на велосипеде.
Dr.Urban
63 / 58 / 7
Регистрация: 14.12.2011
Сообщений: 193
05.02.2013, 02:57     чтение строк, scanf() #5
Цитата Сообщение от [WRG
;4093613]не, не работает, пробовал. сишные функции не связаны с потоками ввода и вывода c++ или не?
Компилирует хотя бы ?

scanf() - не связан с потоками ввода\вывода С++, поэтому и кинул Сишную функцию fflush(stdin);
[WRG]
50 / 50 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
05.02.2013, 11:27  [ТС]     чтение строк, scanf() #6
компилировать то компилирует, а эффекту ноль. компилятор gcc-4.7
Dr.Urban
63 / 58 / 7
Регистрация: 14.12.2011
Сообщений: 193
05.02.2013, 11:29     чтение строк, scanf() #7
Можно весь код глянуть?
[WRG]
50 / 50 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
05.02.2013, 15:09  [ТС]     чтение строк, scanf() #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <cstdio>
 
int main()
{
    char str1[20], str2[100];
    
    printf("-> ");
    scanf("%20s", str1); fflush(stdin);
    
    scanf("%s", str2);
    
    printf("%s   %s", str1, str2);
    
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2013, 08:40     чтение строк, scanf()
Еще ссылки по теме:

Чтение строк из файла C++
Чтение строк из файла C++
C++ Чтение строк из потока
Чтение строк из файла C++
Чтение чисел через scanf C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт С++
4951 / 3027 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
07.02.2013, 08:40     чтение строк, scanf() #9
Во-первых, fflush(stdin) ведёт к UB.
Во-вторых, у меня всё компилируется, запускается и выводится как надо.
Yandex
Объявления
07.02.2013, 08:40     чтение строк, scanf()
Ответ Создать тему
Опции темы

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