Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.136.46] |
|
Сообщ.
#1
,
|
|
|
#include <stdio.h>
#include <conio.h> void main(){ char a[45]; int q; printf("q: "); scanf("%d",&q); printf("a: "); gets(a); printf("***\n%d\n%s",q,a); getch(); } Функция gets() в этом случае (при использовании после scanf()) попросту не вызывается. Чем это может быть вызвано и, самое интересное, как с этим бороться? Просто заменить gets() на scanf() в моём случае нельзя, так как scanf() читает строки только до первого пробела |
Сообщ.
#2
,
|
|
|
Цитата Можно, причем очень просто:Zabiyaka, 16.02.04, 02:44 Просто заменить gets() на scanf() в моём случае нельзя, так как scanf() читает строки только до первого пробела char buffer[256]; printf("Введите строку: "); scanf("%255[^\n\r]",buffer); |
Сообщ.
#3
,
|
|
|
Попробуй использовать fflush:
scanf("%d",&q); fflush(stdin); |
Сообщ.
#4
,
|
|
|
Спасибо, проверим
Кстати, вчера ночью, когда это было срочно нужно, спасло вульгарное удвоение команды gets()... З.Ы. Попробовал метод Trainer-а - будете смеяться, но с ним такая же ботва, как и с fgets. А вот fflush(stdin) помогает. |
Сообщ.
#5
,
|
|
|
Функция (f)scanf вообще очень опасная, и ее можно использовать разве что в проектах для личного и недолгого использования.
Есть очень надежная и ИМХО оптимальная связка для работы с текстовым вводом: fgets+sscanf. Этим способом можно гарантировать стабильность программы при любых входных данных (в отличие даже от С++ функций). |