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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2011, 00:07   #1
Flu
Новичок
Джуниор
 
Регистрация: 14.01.2011
Сообщений: 6
Печаль Два часа не могу понять в чем дело =(

Визуал студио.
Все вводится нормально, но ступорится на банальном вводе цифры в

printf("Vozrast u4itelya: ");
cin >> age;


далее программа перепрыгивает через след. ввод и выполняет функцию uuu.show_uchit();
Самое непонятное, что куда этот СИН не сунь, после него всегда след. ввод пропускается. Что за нах =(

// Классы.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>
using namespace std;

class spisok{ //главный класс
protected:
char name[20];
char soname[20];

};

class uchitelya : spisok{ //производный класс учителя
public:
char predmet[15];
int age;
void puts_uchit(){ //функция ввода данных учителей
printf("Imya u4itelya: ");
gets_s(name);
printf("Familiyu u4itelya: ");
gets_s(soname);
printf("Vozrast u4itelya: ");
cin >> age;
printf("Kakoi predmet vedet: ");
gets_s(predmet);

}
void show_uchit(){ //функция вывода данных учителей
printf("%s %s %2d %s", name, soname, age, predmet);

}
};
int _tmain(int argc, _TCHAR* argv[])
{
uchitelya uuu;
uuu.puts_uchit();
uuu.show_uchit();

_getch();
return 0;
}
Flu вне форума Ответить с цитированием
Старый 14.01.2011, 00:26   #2
Dayman
Форумчанин
 
Аватар для Dayman
 
Регистрация: 12.01.2011
Сообщений: 186
По умолчанию

Workaround:
Код:
cin.sync_with_stdio(false);
cin >> age;
Вообще не рекомендуется использовать cin/cout и их сишные аналоги одновременно.
Lingua c++ non penis caninus est.
Dayman вне форума Ответить с цитированием
Старый 14.01.2011, 00:29   #3
Flu
Новичок
Джуниор
 
Регистрация: 14.01.2011
Сообщений: 6
По умолчанию

Переписала на scanf("%d", &age); толку нет, а вот если без указателя & то программа падает, что-то с памятью? А вот то что вы написали страшная весчь, плохо понимаемо %( В учебнике по визуал студио 2009 года нааписано через принтф вывод делать, вот и...
Flu вне форума Ответить с цитированием
Старый 14.01.2011, 00:41   #4
Dayman
Форумчанин
 
Аватар для Dayman
 
Регистрация: 12.01.2011
Сообщений: 186
По умолчанию

Код:
scanf("%d\n",&age);
либо
Код:
cin >> age;
getchar();
либо мой предыдущий пост, который по сути является "Dirty Hack'ом"

scanf и cin оставляют в потоке \n, который gets и считывает.
Lingua c++ non penis caninus est.
Dayman вне форума Ответить с цитированием
Старый 14.01.2011, 01:10   #5
Flu
Новичок
Джуниор
 
Регистрация: 14.01.2011
Сообщений: 6
По умолчанию

scanf("%d\n",&age); выдал такое:



как-то радостно пошло задом наперед: сначала потребовал ввод в "predmet", а потом уже написал текст что нужно это самое "предмет" ввести... анриал какой-то О.о как это вообще? Строчки кода написаны в другой последовательности О.О

Цитата:
// Классы.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>
using namespace std;

class spisok{ //главный класс
protected:
char name[3];
char soname[3];

};

class uchitelya : spisok{ //производный класс учителя
public:
char predmet[3];
int age;
void puts_uchit(){ //функция ввода данных учителей
printf("Imya u4itelya: ");
gets(name);
printf("Familiyu u4itelya: ");
gets(soname);
printf("Vozrast u4itelya: ");
scanf("%d\n",&age);
printf("Kakoi predmet vedet: ");
gets(predmet);

}
void show_uchit(){ //функция вывода данных учителей
printf("%s %s %2d %s", name, soname, age, predmet);
cout << "\n\n&name = " << &name;
cout << "\n&soname = " << &soname;
cout << "\n&age = " << &age;
cout << "\n&predmet = " << &predmet;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
uchitelya uuu;
uuu.puts_uchit();
uuu.show_uchit();

_getch();
return 0;
}
Flu вне форума Ответить с цитированием
Старый 14.01.2011, 01:28   #6
Dayman
Форумчанин
 
Аватар для Dayman
 
Регистрация: 12.01.2011
Сообщений: 186
По умолчанию

Нда. Не очень хорошее решение. Тогда используйте
Код:
scanf("%d",&age);
getchar();
Lingua c++ non penis caninus est.
Dayman вне форума Ответить с цитированием
Старый 14.01.2011, 02:17   #7
yury_coder
Пользователь
 
Регистрация: 31.10.2010
Сообщений: 53
По умолчанию

я с этим сталкивался

здесь cin выводит ошибку
попробуйте её поймать при помощи конструкции
try-catch, а уже зависимо от неё ищите решение
yury_coder вне форума Ответить с цитированием
Старый 14.01.2011, 05:28   #8
like-nix
Форумчанин
 
Регистрация: 09.11.2009
Сообщений: 104
По умолчанию

2Flu

члены класса создаются в том порядке в котором они были объявленны в классе. Это если вы на основании адресов переменных решили что сначало требует ввод.

хотя у вас ясно написано что и как выводится

printf("%s %s %2d %s", name, soname, age, predmet);

путаете сами себя =)

В строчке cin>>age; считывание идет до первого пробельного символа. Возврат каретки - пробельный символ. Поэтому он остается в буфере и gets_s его мгновенно считывает и возвращает пустую строку.

решение проблемы это использовать однородные операторы ввода вывода.

Последний раз редактировалось like-nix; 14.01.2011 в 05:37.
like-nix вне форума Ответить с цитированием
Старый 14.01.2011, 06:10   #9
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

cin.flush(); после cin пробовали?
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 14.01.2011, 12:42   #10
Flu
Новичок
Джуниор
 
Регистрация: 14.01.2011
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Dayman Посмотреть сообщение
Нда. Не очень хорошее решение. Тогда используйте
Код:
scanf("%d",&age);
getchar();
мм... так зарботало, но разве сканф и гетчар не альтернативны? Или гетчар сработал просто как поглотитель лишнего пустого символа, что остался от сканф? ибо у гетчар нет аргумента О.о
Flu вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу понять, в чем ошибка FlashProStar Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 01.12.2010 12:20
Немогу понять в чем дело! BelialL Помощь студентам 3 09.11.2010 22:16
Не могу понять в чем проблема Lecter2009 БД в Delphi 7 09.09.2010 08:48
Не могу понять в чем проблема BaUruk Общие вопросы C/C++ 3 12.10.2009 10:43
НЕ могу понять в чем проблема! KNatalia Microsoft Office Excel 2 18.08.2009 02:03