Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Масив указателей 
V
    Опции темы
Golovastik
  Дата 9.9.2009, 14:57 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 19.7.2009

Репутация: -1
Всего: 0



Вроде всё делаю по книге, вот, дошёл до темы по масивам указателей. Там в качестве примера код. Дело в том, что при запуске этого кода на выполнение программу выбрасывает, при первом вводе слова и нажатия клавиши ЕНТЕР.ФОто ниже.
Вот исходник:

Код


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

int main()
{
    setlocale(0,"");
    char *dictionary[][2] = {
    "карандаш","Инструмент для писания",
    "клавиатура", "устройство ввода данных",
    "винтовка","Огнестрельное оружие",
    "самолёт","Воздушное судно с неподвижным крылом",
    "сеть","Взаимосвязанная группа компьютеров",
     ", "
    };+
    char word[80];
    int i;
    cout<<"Введите слово: ";
    cin>>word;
    for(i = 0; *dictionary[i][0]; i++)
    {
        if(!strcmp(dictionary[i][0],word))
        {
            cout<<dictionary[i][1]<<'\n';
            break;
        }
    }
    if(!*dictionary[i][0])
        cout<<word << " не найдено.\n";

    cin.ignore();
    cin.get();
}



Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  2.jpg 16,60 Kb
PM MAIL   Вверх
586
Дата 9.9.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 8
Всего: 146



Ошибка в строке №14. Пустая строка в массиве не находится, и цикл продолжается дальше за пределами массива.
Должно быть это:
Код
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    setlocale(0,"");
    char *dictionary[][2] = {
    "карандаш","Инструмент для писания",
    "клавиатура", "устройство ввода данных",
    "винтовка","Огнестрельное оружие",
    "самолёт","Воздушное судно с неподвижным крылом",
    "сеть","Взаимосвязанная группа компьютеров",
    "", ""
    };
    char word[80];
    int i;
    cout<<"Введите слово: ";
    cin>>word;
    for(i = 0; *dictionary[i][0]; i++)
    {
        if(!strcmp(dictionary[i][0],word))
        {
            cout<<dictionary[i][1]<<'\n';
            break;
        }
    }
    if(!*dictionary[i][0])
        cout<<word << " не найдено.\n";
    cin.ignore();
    cin.get();
}

PM   Вверх
azesmcar
Дата 9.9.2009, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Golovastik

Цикл выходит за рамки массива
Код

 char *dictionary[][2] = {
    "карандаш","Инструмент для писания",
    "клавиатура", "устройство ввода данных",
    "винтовка","Огнестрельное оружие",
    "самолёт","Воздушное судно с неподвижным крылом",
    "сеть","Взаимосвязанная группа компьютеров",
     "" // вместо запятой тут скорее всего должна быть пустая строка, тогда цикл остановится
    };


Добавлено через 1 минуту и 49 секунд
уже ответили smile
PM   Вверх
Golovastik
Дата 9.9.2009, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 19.7.2009

Репутация: -1
Всего: 0



Дело в том,что программа по запросу, допустим - сеть,не выводит, фразу "Взаимосвязанная группа компьютеров",
а выводит постоянно не найдено, и ещё слово,которое я ввёл, выводит кодами. Я попробывал сдлать русским ввод и вывод, но программа до сих пор не выводит то,что нужно. Вот переделка.
Код

#include <iostream>
#include  <windows.h>
#include <cstring>
using namespace std;

char b[256];
char *solution(const char *f)
{
CharToOem(f,b);
return b;
}


int main()
{
    setlocale(0,"");
    char *dictionary[][2] = {
    "карандаш","Инструмент для писания",
    "клавиатура", "устройство ввода данных",
    "винтовка","Огнестрельное оружие",
    "самолёт","Воздушное судно с неподвижным крылом",
    "сеть","Взаимосвязанная группа компьютеров",
    "", ""
    };
    char word[80];
    int i;
    cout<<"Введите слово: ";
    cin>>solution(word);
    for(i = 0; *dictionary[i][0]; i++)
    {
        if(!strcmp(dictionary[i][0],word))
        {
            cout<<dictionary[i][1]<<'\n';
            break;
        }
    }
    if(!*dictionary[i][0])
        cout<<solution(word) << " не найдено.\n";
    cin.ignore();
    cin.get();
}

PM MAIL   Вверх
Anikmar
Дата 9.9.2009, 17:10 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(Golovastik @  9.9.2009,  16:54 Найти цитируемый пост)
   cin>>solution(word);

Что вы хотели сделать этой строкой?
PM MAIL ICQ   Вверх
Golovastik
Дата 9.9.2009, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 19.7.2009

Репутация: -1
Всего: 0



Я хочу передать в параметр функции, ввод слова русскими буквами.

Это сообщение отредактировал(а) Golovastik - 9.9.2009, 17:12
PM MAIL   Вверх
Anikmar
Дата 9.9.2009, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(Golovastik @  9.9.2009,  17:11 Найти цитируемый пост)
Я хочу передать в параметр функции, ввод слова русскими буквами.

И где в параметры вы передаете? вы передаете в возвращаемое этой функцией значение - т.е. в b.

Соответственно туда и идет ввод. А потом вы думаете, что то, что ввели у вас  находится в word.

Наверное все-таки как-то так:
Код

cin >> word;
solution(word);


А дальше в b у вас преобразованная строка и работать надо с b
PM MAIL ICQ   Вверх
586
Дата 9.9.2009, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 8
Всего: 146



Цитата(Golovastik @  9.9.2009,  17:54 Найти цитируемый пост)
Дело в том,что программа по запросу, допустим - сеть,не выводит, фразу "Взаимосвязанная группа компьютеров",
а выводит постоянно не найдено, и ещё слово,которое я ввёл, выводит кодами. Я попробывал сдлать русским ввод и вывод, но программа до сих пор не выводит то,что нужно.

С английскими словами будет работать.
PM   Вверх
xvr
Дата 10.9.2009, 12:57 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Golovastik @ 9.9.2009,  17:11)
Я хочу передать в параметр функции, ввод слова русскими буквами.

Это врожденная 'бага' всех компиляторов - они компилируют то, что програмист написал, а не то, что он хотел  smile 
PM MAIL   Вверх
azesmcar
Дата 10.9.2009, 13:04 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(xvr @  10.9.2009,  12:57 Найти цитируемый пост)
Это врожденная 'бага' всех компиляторов - они компилируют то, что програмист написал, а не то, что он хотел  

Да, есть такая штука, на последнем собрании комитета по стандартизации C++ Страуструп выступил с речью по этому поводу. В частности он заявил что такое поведение компиляторов неприемлемо. Современный компилятор обязан распознавать потребности пользователя и компилятор, который делает только то, что от него требует программист не имеет права носить гордого названия "Компилятор 21-ого века". Его предложение оснастить все компиляторы искусственным интеллектом было принято комитетом единогласно. smile 
PM   Вверх
mrbrooks
Дата 10.9.2009, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



Цитата(azesmcar @  10.9.2009,  13:04 Найти цитируемый пост)
Да, есть такая штука, на последнем собрании комитета по стандартизации C++ Страуструп выступил с речью по этому поводу. В частности он заявил что такое поведение компиляторов неприемлемо. Современный компилятор обязан распознавать потребности пользователя и компилятор, который делает только то, что от него требует программист не имеет права носить гордого названия "Компилятор 21-ого века". Его предложение оснастить все компиляторы искусственным интеллектом было принято комитетом единогласно.

давно пора
PM MAIL   Вверх
Golovastik
Дата 10.9.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 19.7.2009

Репутация: -1
Всего: 0



Вот наконец-то сработало:
Код

#include <iostream>
#include <windows.h>
using namespace std;
 
char b[256];
char *solution(const char *f)
{
        CharToOemA(f,b);
        return b;
}

char *unsolution(const char *t)
{
    OemToCharA(t,b);
    return b;
}

int main()
{
        setlocale(LC_ALL,"Russian");
        char *dictionary[][2] = {
                "карандаш","Инструмент для писания",
                "клавиатура", "устройство ввода данных",
                "винтовка","Огнестрельное оружие",
                "самолёт","Воздушное судно с неподвижным крылом",
                "сеть","Взаимосвязанная группа компьютеров",
                "", ""
        };
        char word[80];
        int i;
        cout<<"Введите слово: ";
        cin>>word;
        for(i = 0; *dictionary[i][0]; i++)
        {
                if(!strcmp(solution(dictionary[i][0]),word))
                {
                        cout<<dictionary[i][1]<<'\n';
                        break;
                }
        }
        if(!*dictionary[i][0])
                cout<<"Слово " <<unsolution(word)<< " не найдено.\n";
        cin.ignore();
        cin.get();
}

PM MAIL   Вверх
mrbrooks
Дата 10.9.2009, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



Цитата(Golovastik @  10.9.2009,  13:43 Найти цитируемый пост)
Вот наконец-то сработало:

а поискать было видимо лень - вот к примеру
PM MAIL   Вверх
Anikmar
Дата 10.9.2009, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(Golovastik @  10.9.2009,  13:43 Найти цитируемый пост)
Вот наконец-то сработало:

С почином вас.

Закройте тему, если вам все понятно.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0603 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.