Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
#1

Программа телефонный номер - C++

04.09.2009, 20:01. Просмотров 1681. Ответов 24
Метки нет (Все метки)

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#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();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2009, 20:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа телефонный номер (C++):

Создать структуру, содержаую данные фамилию, имя, дату рождения и телефонный номер - C++
Создать структуру, содержаую данные фамилию, имя, дату рождения и телефонный номер. Сортировать по номерам телефона и, если вводить...

Посмотрите код! (используя функцию strtok, разбить телефонный номер формата (555) 555-5555, введенный как строку, на лексемы) - C++
Посмотрите код все правильно ли??? Задание звучит так, используя функцию strtok, разбить телефонный номер формата (555) 555-5555, введенный...

Реализовать связь классов "телефонная книга" и родительский класс "телефонный номер" - C++
Суть проблемы:есть дочерний класс &quot;телефонная книга&quot; и родительский класс &quot;телефонный номер&quot;. В классе &quot;телефонная книга&quot; к заданной...

Программа, запрашивающую номер месяца (1-12) - C++
Создайте программу, запрашивающую номер месяца (1-12) и выводящую на экран соответствующий ему сезон (1- зима, 6-лето и т.п.). Используйте...

первая программа попытка номер три) - C++
здравствуйте! начал читать книгу по c++ там предлагается написать программу для определения возраста. в книге она выглядит так : int main...

Программа находит макс. номер в файле... - C++
Написал программу с классами fstream, которая в определенном файле находит мин. номер и макс. номер. (в файле - только целочисленные...

24
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
05.09.2009, 16:21  [ТС] #16
Вроде всё работает, последний момент. Почему,если поставить условие
Код
 while(t == "сила");
программа перестанет продолжать работать?
0
M128K145
Эксперт С++
8297 / 3517 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
05.09.2009, 16:25 #17
Цитата Сообщение от Golovastik Посмотреть сообщение
программа перестанет продолжать работать?
Наверно имеет смысл написать так
C++
1
while(t == aladin("сила"));
Ведь заметь, то что написано в коде кириллицей корректно сравнивается с введенным текстом только после преобразования с помощью CharToOemA. Это стоит в будущем учитывать
0
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
05.09.2009, 16:36  [ТС] #18
Странно, не думал,что нужно передавать в функцию слово сила. Ещё один вопросик и всё.
Скажите, можно ли использовать setlocale() вместо CharTOOem?
Что именно даёт:
C++
1
if(i == 10]) cout<<"\nОтсутсвует в каталоге. ";
Вроде написал, но понять не могу эту строку. Можно ли использовать cin.fail(), слышал вроде есть такая функция. Дайте расшифровку,если не затруднит,ещё раз понятнее по строке выше if(i == 10]. Благодарю заранее.
0
M128K145
Эксперт С++
8297 / 3517 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
05.09.2009, 17:41 #19
по поводу cin.fail() cin
setlocale("сила") так что ли? Тогда нет. Или как, уточни вопрос?
if(i == 10]) во первых квадратной скобки там быть не может, во вторых i будет равно 10 тогда и только тогда, когда пройден весь массив и не найдено ни одного совпадения(если оно будет найдено, то цикл прервется и i не будет дальше увеличиватся и, следовательно, будет i < 10)
0
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
05.09.2009, 17:59  [ТС] #20
По поводу i = 10, понятно,тоесть когда пройден весь массив и не найдено ни одного совпадения,тогда i не будет увеличиваться, следовательно и выдаст сообщение, с этим уяснил.
По поводу cin.fail,у вас не работает ссылка, я так и не смог прочитать. Теперь по поводу setlocale
Я имею ввиду,если описать как-то функцию(всю), с использованием её, возможно ли это?
Тоесть можно ли с помощью её переделать вот это:
C++
1
2
3
4
5
char*aladin(const char *balada)
{
        CharToOem(balada,maska);
        return maska;
}
Последний вопрос.
Почему,если изменить строку:
Код
char *aladin(const char *balada)
на строку
Код
char aladin(const char *balada)
Программа перестанет работать?
Выдаст ошибку:
cannot convert from 'char [256]' to char
0
M128K145
Эксперт С++
8297 / 3517 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
05.09.2009, 18:14 #21
Есть такая хорошая программистская поговорка
Если программа работает, то лучше ничего там не трогай!!!
И поверь она себя оправдывает, поэтому используй лучше эту функцию.

Цитата Сообщение от Golovastik Посмотреть сообщение
Программа перестанет работать?
Потому что надо вернуть указатель на результирующую строку
0
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
05.09.2009, 18:17  [ТС] #22
Ответьте пожалуйста на вторую часть вопроса, в последнем посте. Это последний вопрос, окончательный, в этой теме.
0
chelovechek
сишник
Автор FAQ
130 / 37 / 0
Регистрация: 25.07.2009
Сообщений: 291
05.09.2009, 18:22 #23
Golovastik, char - это только один символ, а char* - указатель на массив символов, т.е. строка.
0
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
05.09.2009, 18:24  [ТС] #24
А конкретней, в данной программе, почему программа не скомпилится,если написать так:
C++
1
char aladin(const char *balada)
а не так:

C++
1
char *aladin(const char *balada)
0
M128K145
Эксперт С++
8297 / 3517 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
05.09.2009, 19:03 #25
потому что синтаксис функции такой
C++
1
2
3
4
5
тип_возвращаемой_переменной Имя_функции(тип_параметра имя параметра)
{
        тело функции;
        return возвращаемая переменная;
}
В данном случае мы возвращаем переменную maska. Она у нас является массивом char'ов. Любой массив возвращается по указателю. Указатель возвращается как
C++
1
тип_переменной_на_которую_указывает_указатель*
В переменной maska есть 256 элементов и компилятор просто не понимает, что тебе надо вернуть, потому что
Цитата Сообщение от chelovechek Посмотреть сообщение
char - это только один символ, а char* - указатель на массив символов
Поэтому компилятор и выдает тебе эти законные 3 ошибки
Код
error C2440: 'return' : cannot convert from 'char [256]' to 'char'
error C2664: 'strcmp' : cannot convert parameter 2 from 'char' to 'const char *'
error C2678: binary '==' : no operator found which takes a left-hand operand of type 
             'std::string' (or there is no acceptable conversion)
0
05.09.2009, 19:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.09.2009, 19:03
Привет! Вот еще темы с ответами:

Программа вычисляющая номер позиции первого символа 0 - C++
Доброго времени суток Требуется написать такую программу: Используя тип unsigned long int, выполнить с двоичным представлением...

Программа, показывающая номер человека в очереди по его фамилии - C++
Помогите, пожалуйста! Нужно написать программу, показывающую номер человека в очереди по его фамилии. Данные хранятся в виде массива...

Определить номер наименьшего числа последовательности (программа работает но не правильно) - C++
Дана последовательность из целых чисел, за которой следует 0. Определите номер наименьшего числа из этой последовательности....

Функция и программа для проверки, которая возвращает номер минимального элемента C++ - C++
Написать функцию и программу для ее проверки, которая возвращает номер минимального элемента в массиве целых чисел.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru