Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема со scanf()ом, не могу понять в чем ошибка 
:(
    Опции темы
Shipa
Дата 26.10.2009, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.10.2009

Репутация: нет
Всего: нет



Люди добрые, помогите мне, неумехе несчастному...
короче, есть прога на си:
Код

#include<stdio.h>
#include<stdlib.h>
int pumba(void)
{
int z;
float f1;
printf("\nVvedi chislo--->");
z=scanf("%f", &f1);
printf("%d",z);
(z != 0) ? printf("\nМолодец!"):printf("\nОсёл!");
return 0;
}
int main(void)
{
printf("_____________________________________________________");
int i;
for(i=0;i<5;i++)pumba();
printf("\nArrivedechi!\n");
printf("_____________________________________________________");
exit(0);
}

Оформить её можно поразному, суть не изменится. Программа проверяет ввод: число\буква.
Суть в том, что в отдельной программе процедура pumba выполнится идеально, но как только втыкаешь её в цикл, то начинаются жесткие лаги.....
Почему так происходит???
Что с этим делать??
вообще, надо создать простенькую фильтрацию входных данных, может это как-то по другому лучше делать??

Это сообщение отредактировал(а) Shipa - 26.10.2009, 14:59
PM MAIL   Вверх
bsa
Дата 26.10.2009, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



легко. Сначала читаешь строку через fgets(buf, size_of_buffer, stdin), затем парсишь ее уже через sscanf.
PM   Вверх
Shipa
Дата 26.10.2009, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.10.2009

Репутация: нет
Всего: нет



bsa, можно поподробнее, если можно, просто я слабо ориентируюсь в си пока что... 
PM MAIL   Вверх
XYZ010
Дата 26.10.2009, 19:52 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 26.10.2009

Репутация: нет
Всего: нет



А да к все понятно функции  то передать надо что то а вы ее пустую запускаете.
Код

void pumba()
{
int z;
float f1;
printf("\nVvedi chislo--->");
z=scanf("%f", &f1);
printf("%d",z);
(z != 0) ? printf("\nМолодец!"):printf("\nОсёл!");
}

вот так поппробуйте инициализировать
PM MAIL   Вверх
bsa
Дата 26.10.2009, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



XYZ010, ты думаешь, что убрав возвращаемое значение что-то поменяется? А зря!

Shipa, что делает scanf() знаешь? Она читает стандартный ввод на предмет подходящих шаблону символов, затем парсит и записывает значение в переменную. Если попадаются некорректные символы, то они не забираются из потока, таким образом, следующая команда scanf опять их и считает. Чтобы этого не происходило, нужно сначала прочитать всю строку в буфер из стандартного ввода, а затем уже отправить на разбор. С буфером работает уже функция sscanf().
PM   Вверх
Anikmar
Дата 26.10.2009, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Попробуйте после scanf воткнуть fflush(stdin);
PM MAIL ICQ   Вверх
XYZ010
Дата 27.10.2009, 06:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 26.10.2009

Репутация: нет
Всего: нет



Цитата(bsa @ 26.10.2009,  23:34)
XYZ010, ты думаешь, что убрав возвращаемое значение что-то поменяется? А зря!



я не говорю о том что функция что то возвращает она у вас получает все что угодно. Зачем?
PM MAIL   Вверх
bsa
Дата 27.10.2009, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



XYZ010, почитай книжку по Си. Что сейчас в С99, я не знаю, а раньше было так: f(void) - функция которая не принимает никакие параметры, а f() - функция, количество параметров которой не определено.. В С++ f(void) и f() - одно и тоже.
PM   Вверх
Shipa
Дата 28.10.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.10.2009

Репутация: нет
Всего: нет



всем спасибо, я разбил строку посимвольно ивсе ок! 
PM MAIL   Вверх
bsa
Дата 28.10.2009, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Shipa @  28.10.2009,  15:41 Найти цитируемый пост)
всем спасибо, я разбил строку посимвольно ивсе ок!
мазохист...


M
bsa
Если ответ на вопрос получен, то пометь тему решенной.


PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1024 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.