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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 04.09.2009, 19:59   #1
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
Плохо Программа телефонный номер

Тут столкнулся с проблемой. Программа не выводит телефонный номер, при вводе русских символов, реагирует только на английский ввод.
Не знаю, вроде всё должно работать.Вот исходник:

Код:

#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
	setlocale(0,"");
	int i;
	char str[80];
	char numbers[10][80] = {
	"Том","555-332",
	"Мария","555-8976",
	"Джон","555-1037",
	"Раиса","555-1400",
	"Golovastik","222-5050"
	};
	cout<<"Введите имя:  ";
	cin>>str;
	for(i = 0; i < 10; i+=2)
	if(!strcmp(str,numbers[i]))
	{
		cout<<"Телефонный номер: "<<numbers[i+1]<<'\n';
		break;
	}
	if(i==10) cout<<"Отсутствует в каталоге. \n";
	cin.ignore();
	cin.get();

}
Golovastik вне форума
Старый 04.09.2009, 20:18   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Это из-за проблем с кодировками. Если Вы пишете для Windows, то можно использовать функцию OemToChar(LPCSTR lpSrc, LPSTR lpDest);
Код:
#include <windows.h>

...

cin>>str;
OemToChar(str, str);
for(i = 0; i < 10; i+=2)
...
Ещё гляньте по ссылке

Последний раз редактировалось netrino; 04.09.2009 в 20:22.
netrino вне форума
Старый 04.09.2009, 20:21   #3
pproger
C++ hater
Старожил
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

у меня все работает.
пс. идиотское решение хранить 2 различных типа данных в одном массиве (имя и телефон). тяжело структуру создать было? еще проще использовать map
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума
Старый 04.09.2009, 20:33   #4
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Проблемма всё же осталась при вводе русских слов.
Код:
Лучше использовать  map.
Что за map?
Golovastik вне форума
Старый 04.09.2009, 20:39   #5
pproger
C++ hater
Старожил
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Golovastik
ассоциативный массив. Естественно, проблему ТВОИХ русских букв это не решит (я подчеркнул, ибо у меня все нормально с русским вводом).
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума
Старый 04.09.2009, 20:42   #6
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Как решить проблему тогда? Может существуют какие-то функции?
Golovastik вне форума
Старый 04.09.2009, 20:48   #7
pproger
C++ hater
Старожил
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Golovastik
у тебя наверна неправильный виндоус
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума
Старый 04.09.2009, 21:01   #8
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Я думаю виндоус нормальный, правда сборка Xtreame2008/ Вот так уже
лучше:

Код:
#include <iostream>
#include<windows.h>
 
char bufRus[256];
 
char* Rus(const char* text)
{
        CharToOemA(text, bufRus);
        return bufRus;
}
using namespace std;
 
int main()
{
        setlocale(0,"");
        int i;
        char str[80];
        char numbers[10][80] = {
                "Том","555-332",
                "Мария","555-8976",
                "Джон","555-1037",
                "Раиса","555-1400",
                "Golovastik","222-5050"
        };
        cout<<"Введите имя:  ";
        cin>>str;
        for(i = 0; i < 10; i+=2)
                if(!strcmp(str,Rus(numbers[i])))
                {
                        cout<<"Телефонный номер: "<<numbers[i+1]<<'\n';
                        break;
                }
                if(i==10) cout<<"Отсутствует в каталоге. \n";
                cin.ignore();
                cin.get();
}
Golovastik вне форума
Старый 05.09.2009, 15:54   #9
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Есть ещё вопрос. Попробовал реализовать данную программу таким способом, но что-то программа вообще стала хромать, не скажете,что в ней не так:
Код:
#include <iostream>
#include <windows.h>
#include <string>

using namespace std;
char maska[256];

char*aladin(const char *balada)
{
	CharToOem(balada,maska);
	return maska;
}


int main()
{

setlocale(0,"");
	string t;
int i;
char vvod[15];	
char a[10][20] = {
	"Казбек","888-99",
	"Павел","111-222",
	"Колобок","5-97-35",
	"Папа","978-255",
	"Суслик","239-655"
};

do{

cout<<"Введите имя, для поиска номера телефона -> ";
cin>>vvod;
for(i = 0; i < 10; i+=2)
{
	
	if(!strcmp(vvod,aladin(a[i])))
		cout<<"Телефонный номер "<<a[i]<<" = "<<a[i+1]<<endl;
	break;
}

if(i == 15) cout<<"\nОтсутсвует в каталоге. "; 

cout<<"Продолжить запрос? Если да, введите слово 'fanta' \n\t-> ";
cin>>t;

} while(t == "fanta");
cin.ignore();
cin.get();
}

Последний раз редактировалось Golovastik; 05.09.2009 в 16:01.
Golovastik вне форума
Старый 05.09.2009, 16:12   #10
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

В цикле вы забыли про фигурные скобки, в проверке условия:
Код:
for(i = 0; i < 10; i+=2)
{
	
	if(!strcmp(vvod,aladin(a[i]))) {
		cout<<"Телефонный номер "<<a[i]<<" = "<<a[i+1]<<endl;
	           break;
           }
}
А так же в последующей проверке вместо 15 должно быть 10, в цикле вы ведь только до 10-ти считаете, значит условие никогда не будет выполнено:
Код:
if(i == 10) cout<<"\nОтсутствует в каталоге.";
netrino вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ справочник телефонный BLacK_TeaR Помощь студентам 3 04.03.2010 13:42
Телефонный справочник Krechet Софт 5 10.08.2009 15:51
как програмно увидеть телефонный звонок и номер телефона LiderServis Мультимедиа в Delphi 1 17.01.2009 12:03
Телефонный справочник на TC Qai Фриланс 5 25.05.2008 01:02
WinApi, программа должна выдавать основной номер версии ОС MARGO Win Api 2 16.11.2007 21:14