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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2012, 13:36   #1
s_t_c
АСУТП
Пользователь
 
Аватар для s_t_c
 
Регистрация: 29.07.2012
Сообщений: 19
Печаль Структуры

Доброго времени суток, всем!

Начал писать очередную контрольную работу, основанную на структуре и решил проверить заранее вывод на экран фамилии. С помощью информации в структуре в конце концов нужно будет вычислить и вывести на экран самое распространенное женское имя из 20-ти студентов.
Только вот вводить ввожу,а выводит не совсем то , что хотелось бы увидеть).... Ни printf(), ни read(), ни cout... (как видно из кода) чего то не помогают...
Код:
//Самое распространенное женское имя
#include<iostream>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>


using namespace std;

		struct inform//Структура информации
	{
		char fam[12],name[12],otch[12],pol;//Поля фамилия,имя,отчество,
		int old,kurs;//возраст,курс
	};

void main()
{
	setlocale (LC_ALL, "RUS");

	int i=0,j;
	inform tab1[20],tab2[20];
	cout<<"Введите фамилию:\n";
	cin>>tab1[i].fam;

	cout<<tab1[i].fam;

	system("pause");
	getch();
}
PHP код:
Введите фамилию:
Иванов
?ў*-RўДля продолжения нажмите любую клавишу . . . 
P.S. Visual Stidio 2008


Помогите разобраться, плиз..
Доводи начатое до конца прежде чем начать другое дело.....

Последний раз редактировалось s_t_c; 07.12.2012 в 13:42.
s_t_c вне форума Ответить с цитированием
Старый 07.12.2012, 14:34   #2
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Код:
#include "locale.h"
.....
int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL, ".1251");
	//Или тоже самое мнемонически 
	//setlocale(LC_ALL, "Russian");
.......
}
UPD: ай нет, локаль уже определена
UPD 2: таки да, это все же локаль, но русская под DOS;

Последний раз редактировалось Smogg; 07.12.2012 в 15:11.
Smogg вне форума Ответить с цитированием
Старый 07.12.2012, 14:49   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Код:
cin.imbue(locale(".866"));
cout.imbue(locale(".866"));
p51x вне форума Ответить с цитированием
Старый 07.12.2012, 15:17   #4
s_t_c
АСУТП
Пользователь
 
Аватар для s_t_c
 
Регистрация: 29.07.2012
Сообщений: 19
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Код:
cin.imbue(locale(".866"));
cout.imbue(locale(".866"));
Сразу возникает переполнение буфера и так же иероглифы при выводе.
Не помогло...
Доводи начатое до конца прежде чем начать другое дело.....
s_t_c вне форума Ответить с цитированием
Старый 07.12.2012, 16:20   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Код:
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

using namespace std;

struct inform//Структура информации
{
  char fam[12],name[12],otch[12],pol;//Поля фамилия,имя,отчество,
  int old,kurs;//возраст,курс
};

int main()
{
  cin.imbue(locale(".866"));
  wcout.imbue(locale(".866"));

  int i=0;
  inform tab1[20];
  wcout << L"Введите фамилию:\n";
  cin  >> (char *)tab1[i].fam;

  wcout << tab1[i].fam;

  system("pause");
}
Так работает...
p51x вне форума Ответить с цитированием
Старый 08.12.2012, 09:07   #6
s_t_c
АСУТП
Пользователь
 
Аватар для s_t_c
 
Регистрация: 29.07.2012
Сообщений: 19
По умолчанию

А подскажите пожалуйста, почему у меня в этом коде не копируется строка. Выводит ерунду какую-то...
Код:
//Самое распространенное женское имя
#include<iostream>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define stp ""
#define n 2


using namespace std;

		struct inform//Структура информации
	{
		char fam[12],name[12],otch[12],pol;//Поля фамилия,имя,отчество,пол
		int old,kurs,kol;//возраст,курс
	};

void main()
{
	cin.imbue(locale(".866"));
  wcout.imbue(locale(".866"));

	int i=0,j,k=1;
	inform tab1[n],tab2[n];

	for(k=1,i=0;i<n;i++,k++)
	{
		wcout<<L"Введите данные"<< k<<L"-го студента:\n";

			wcout<<L"Фамилия:\t";
			cin>>(char*)tab1[i].fam;
			wcout<<L"\nИмя:\t";
			cin>>(char*)tab1[i].name;
			wcout<<L"\nОтчество:\t";
			cin>>(char*)tab1[i].otch;
			wcout<<L"\nПол:\t";
			cin>>tab1[i].pol;

			if(tab1[i].pol=='Ж')
				strcpy(tab2[i].name,tab1[i].name);
	}
	wcout<<tab2[i].name;


	system("pause");
	getch();
Доводи начатое до конца прежде чем начать другое дело.....

Последний раз редактировалось s_t_c; 08.12.2012 в 09:10.
s_t_c вне форума Ответить с цитированием
Старый 08.12.2012, 10:38   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Без хелпа не помню, но предположу что функции нужно передавать указатели.
Код:
strcpy(&tab2[i].name,&tab1[i].name);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.12.2012, 11:17   #8
s_t_c
АСУТП
Пользователь
 
Аватар для s_t_c
 
Регистрация: 29.07.2012
Сообщений: 19
По умолчанию

С указателями тоже не получилось...
Код:
//Самое распространенное женское имя
#include<iostream>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define stp ""
#define n 2


using namespace std;

		struct inform//Структура информации
	{
		char fam[12],name[12],otch[12],pol;//Поля фамилия,имя,отчество,пол
		int old,kurs,kol;//возраст,курс
	};

void main()
{
	cin.imbue(locale(".866"));
  wcout.imbue(locale(".866"));

	int i=0,j,k=1;
	inform *tab1,*tab2,*ptr1,*ptr2;
	tab1=new inform[n];
	tab2=new inform[n];
	ptr1=tab1;
	ptr2=tab2;

	for(k=1,i=0;i<n;i++,k++)
	{
		wcout<<L"Введите данные"<< k<<L"-го студента:\n";

			wcout<<L"Фамилия:\t";
			cin>>ptr1->fam;
			wcout<<L"\nИмя:\t";
			cin>>ptr1->name;
			wcout<<L"\nОтчество:\t";
			cin>>ptr1->otch;
			wcout<<L"\nПол:\t";
			cin>>ptr1->pol;

			if(tab1->pol=='Ж')
				strcpy(&ptr2->name,&ptr1->name);
	}
	printf("%12s",tab2->name);


	system("pause");
	getch();
}

ошибка:C2664: strcpy: невозможно преобразовать параметр 1 из 'char (*)[12]' в 'char *'
Доводи начатое до конца прежде чем начать другое дело.....
s_t_c вне форума Ответить с цитированием
Старый 08.12.2012, 17:34   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

1. У вас проблема не с копированием, а с сравнением... Ж в 866 и Ж в 1251 (в которой у вас исходник) разные.
2.
Код:
wcout<<tab2[i].name;
Как думаете, чем тут i равен после цикла?
3. Можно так
Код:
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define stp ""
#define n 1


using namespace std;

struct inform//Структура информации
{
  wchar_t fam[12],name[12],otch[12],pol;//Поля фамилия,имя,отчество,пол
  int old,kurs,kol;//возраст,курс
};

int main()
{
  wcin.imbue(locale(".866"));
  wcout.imbue(locale(".866"));

  int i=0,k=1;
  inform tab1[n],tab2[n];

  for(k=1,i=0;i<n;i++,k++)
  {
    wcout<<L"Введите данные"<< k<<L"-го студента:\n";

    wcout<<L"Фамилия:\t";
    wcin>>(wchar_t*)tab1[i].fam;
    wcout<<L"\nИмя:\t";
    wcin>>(wchar_t*)tab1[i].name;
    wcout<<L"\nОтчество:\t";
    wcin>>(wchar_t*)tab1[i].otch;
    wcout<<L"\nПол:\t";
    wcin>>tab1[i].pol;

    if(tab1[i].pol==L'Ж')
      wcscpy(tab2[i].name,tab1[i].name);
  }
  wcout<<tab2[0].name;


  system("pause");
}

Последний раз редактировалось p51x; 08.12.2012 в 17:50.
p51x вне форума Ответить с цитированием
Старый 10.12.2012, 02:35   #10
s_t_c
АСУТП
Пользователь
 
Аватар для s_t_c
 
Регистрация: 29.07.2012
Сообщений: 19
По умолчанию

Цитата:
2.
Код:

wcout<<tab2[i].name;

Как думаете, чем тут i равен после цикла?
Тут ясно. Спасибо!

Пишу далее по заданию. Из 20 студентов нужно определить самое распространенное женское имя и вывести всю информацию на экран.

Код:
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define stp ""
#define n 20


using namespace std;

struct inform//Структура информации
{
  wchar_t fam[12],name[12],otch[12],pol;//Поля фамилия,имя,отчество,пол
  int old,kurs,kol;//возраст,курс
};

int main()
{
  wcin.imbue(locale(".866"));
  wcout.imbue(locale(".866"));

  int i=0,j=0,k=1,b;
  inform tab1[n],tab2[n],tab3[n];

  for(k=1,i=0;i<n;i++,k++)
  {
    wcout<<L"Введите данные"<< k<<L"-го студента:\n";

    wcout<<L"Фамилия:\t";
    wcin>>(wchar_t*)tab1[i].fam;
    wcout<<L"\nИмя:\t";
    wcin>>(wchar_t*)tab1[i].name;
    wcout<<L"\nОтчество:\t";
    wcin>>(wchar_t*)tab1[i].otch;
    wcout<<L"\nПол:\t";
    wcin>>tab1[i].pol;

    if(tab1[i].pol==L'Ж')
      wcscpy(tab2[i].name,tab1[i].name);

    wcout<<L"Введите возраст от 16 до 35:\t";
    wcin>>(wchar_t*)tab1[i].old;

    if(tab1[i].old>16&&tab1[i].old<35)
      wcout<<L"\nВведите курс от 1 до 5:\t";

    else wcout<<L"\nНе допустимый возраст!";

    wcin>>(wchar*)tab1[i].kurs;
    if(tab1[i].kurs>=1&&tab1[i].kurs<=5)
      wcout<<L"\t год обучения.";
    else wcout<<L"\nНет такого курса!";

    b=k;
  }

    for(i=0,j=0;i<b;i++)
   {
        if(wcscmp(tab2[i].name,tab2[i+1].name)=0)
          wcscpy(tab3[j].name,tab2[i].name);
    }
  wcout<<tab3[0].name;


  system("pause");
}
Не могу проверить, компилятора под рукой нет.
Будет работать?
Доводи начатое до конца прежде чем начать другое дело.....
s_t_c вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические структуры данных, списковые структуры (надо разобраться что делает программа) _4Alex4_ Помощь студентам 1 14.11.2012 07:39
Написание программ (древовидные структуры, структуры неспециального вида и т.д.) Green Gin Фриланс 2 27.04.2012 15:26
Управляющие структуры. Программирование алгоритмов разветвляющейся структуры. Лёнка Компоненты Delphi 1 23.04.2012 15:03
Структуры с++ SoMoN Помощь студентам 0 12.12.2010 16:44
СТРУКТУРЫ В С++ kate_miss Общие вопросы C/C++ 3 09.12.2010 21:58