Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2009, 15:36   #1
Wi1D
Кибернетик
Форумчанин
 
Аватар для Wi1D
 
Регистрация: 22.10.2008
Сообщений: 142
Восклицание выдает ошибку при вызове scanf

Кто может подсказать почему прога вылетает на отмеченном шаге!а если заменить scanf на cin то прога просто зависает на этом моменте!
Код:
#include "stdafx.h"
#include <iostream>
int main()  //основная программа
{   FRACTION FR1,FR2,FR3;
	char temp='a',tek_action='\0';
	int znak_minys=0,tcel=0,tchis=0,tznam=0;//знак в конце.счетчик.и темповские значения
	FR3.set(0,0);
	cout << "BBeDuTe 1 Drobi v formate celoe|chis/znam"<<endl;
	scanf("%d%c%d%c%d",&tcel,&temp,&tchis,&temp,&tznam);
	tchis=tcel*tznam+tchis;
	FR1.set(tchis,tznam);
	cout << "chis " <<FR1.get_chis() << endl << "znam " << FR1.get_znam() << endl;

	cout << "BBeDuTe 2 Drobi v formate celoe|chis/znam"<<endl;
	scanf("%d%c%d%c%d",&tcel,&temp,&tchis,&temp,&tznam);
	tchis=tcel*tznam+tchis;
	FR2.set(tchis,tznam);
	cout << "chis " <<FR2.get_chis() << endl << "znam " << FR2.get_znam() << endl;

	cout << "BBeDuTe DEuCTBue"<<endl;
	scanf("%c",tek_action); //<-----вот тут
	switch (tek_action) {
		case '+':
			FR1.set((NOZ(FR1.get_znam(),FR2.get_znam())*FR1.get_chis())/FR1.get_znam(),NOZ(FR1.get_znam(),FR2.get_znam()));			
			FR2.set((NOZ(FR1.get_znam(),FR2.get_znam())*FR2.get_chis())/FR2.get_znam(),NOZ(FR1.get_znam(),FR2.get_znam()));			
			FR3.set((FR1.get_chis()+FR2.get_chis()),FR1.get_znam());
			FR3.sokr_and_vid();
			break;
не существует идеальных программ...и людей тоже..
<== P.S. если я тебе помог нажми весы слева <==
Wi1D вне форума Ответить с цитированием
Старый 27.12.2009, 15:49   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

может быть &tek_action нужно ?
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 27.12.2009, 15:54   #3
Wi1D
Кибернетик
Форумчанин
 
Аватар для Wi1D
 
Регистрация: 22.10.2008
Сообщений: 142
По умолчанию

;DDDD блин во я невнимательный))))спасибо!)ток терь он не ждет пока введу а сразу пролетает!эт почему?)
А ПОЧЕМУ НЕ ОСТАНАВЛИВАЕТСЯ scanf????
не существует идеальных программ...и людей тоже..
<== P.S. если я тебе помог нажми весы слева <==

Последний раз редактировалось Wi1D; 27.12.2009 в 17:14.
Wi1D вне форума Ответить с цитированием
Старый 27.12.2009, 18:50   #4
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Может потому что scanf находится в stdio.h?
Цитата:
Код:
#include "stdafx.h"
#include <iostream>
Цитата:
.....который находится внутри stdafx.h...
Предположу что using namespace std тоже там
А вообще лучше создавать пустые проекты на VS. Так гемора меньше и наглядней. Без всяких stdafx'ов...

Последний раз редактировалось psycho-coder; 27.12.2009 в 18:58.
psycho-coder вне форума Ответить с цитированием
Старый 27.12.2009, 18:52   #5
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

.....который находится внутри stdafx.h...
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 27.12.2009, 19:53   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Wi1D Посмотреть сообщение
;DDDD блин во я невнимательный))))спасибо!)ток терь он не ждет пока введу а сразу пролетает!эт почему?)
А ПОЧЕМУ НЕ ОСТАНАВЛИВАЕТСЯ scanf????
Потому что после предыдущего чтения в буфере остался символ перевода строки...
Перед scanf, который читает символ напишите cin.ignore(), или getchar()

Последний раз редактировалось netrino; 27.12.2009 в 19:59.
netrino вне форума Ответить с цитированием
Старый 27.12.2009, 19:53   #7
StuDDenT
Пользователь
 
Регистрация: 07.11.2009
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Wi1D Посмотреть сообщение
;DDDD блин во я невнимательный))))спасибо!)ток терь он не ждет пока введу а сразу пролетает!эт почему?)
А ПОЧЕМУ НЕ ОСТАНАВЛИВАЕТСЯ scanf????
Я думаю что все дело в cout:
Код:
cout << "BBeDuTe DEuCTBue"<<endl;
scanf("%c",tek_action); //<-----вот тут
cout-потоковый вывод
Т.е. скорей всего получается так что в момент когда начинает выполнятся scanf, cout еще не закончил вывод текста, и получается что scanf хватает один из символов который выводит cout.
В таком случае если после cout идет сразу ввод то нужно пользоваться чем-то вроде fflush(stdout)

Последний раз редактировалось StuDDenT; 27.12.2009 в 19:57.
StuDDenT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IdHTTP.Get Google выдает ошибку при попытке получить исходный текст dkdkdk Работа с сетью в Delphi 6 17.12.2009 16:23
при поиске по базе выдает ошибку - Пропущен оператор в выражении frai БД в Delphi 1 09.11.2007 23:01
При активизации формы выдает ошибку Canadec Общие вопросы Delphi 11 04.09.2007 12:10