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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.94
zewer
1169 / 863 / 90
Регистрация: 07.01.2011
Сообщений: 6,233
#1

Вывод результата на экран - C++

20.04.2012, 23:58. Просмотров 2261. Ответов 44
Метки нет (Все метки)

Всем привет, нуждаюсь в помощи!
Написал прогу, она еще не на 100% готова, но при прекопиляции дает ошибку в последних 2 строках кода

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <conio.h>
#include "iostream"
#include "fstream"
using namespace std;
 
struct List
{
    char ar[100];
};
 
void main ()
{
    setlocale (LC_ALL,"Ukrainian");
    List *l;
    int h;
    int key = 0;
    int tmp;
    int m = 37;
    char *ar[37];
    ifstream in("C:\\data.txt",ios::in);
    cout << "\t\t\tХеш-таблиця № 1\n";
 
    while(!in.eof())
    {
        cout << "\n\n";
        l = new List [100];
        in >> l->ar;
        cout << "Зчитане слово: " << l->ar;
        while ( l->ar[key] != NULL )
            key++;
        cout << "\nСлово (ключ) мiстить " << key << " слiв\n";
        h = (7*key)%37;
        cout << "\th(key) = " << h << "\n\n";
        if (ar[h] == NULL)
        {
            ar[h] = l->ar;
            cout << "\tСлово занесено у хеш-таблицю\n";
        }
        else
        {
            cout << "Слово не може бути занесеним у хеш-таблицю, оскiльки виявлено колiзiю\n";
        }
        key = 0;
    }
    in.close();
    for (int i = 0; i < m; i++)           /// сдесь ошибка
        cout << *ar[i];         //// сдесь ошибка
}
помогите правильно виводить масив, в котором в будущем при обработке входной инфы будет результат

Коротко по програме:
Вх данные местяться в data.txt , я их копирую в прогу, работаю с ними, по формуле делаю хеш-таблицу, и в масиве ar[i] будет меститься сама таблица, но при виводе на экран - прога получает crash, помогите пжл)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2012, 23:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод результата на экран (C++):

Вывод результата - C++
решил такую задачу, мозг кипит, потому прошу: РАЗЪЯСНИТЕ как вывести ответ не просто числа а именно чтобы указывалось значение Z1 и Z2 ...

Вывод результата - C++
Прошу совета. Сперва думал, что где-то в коде ошибка, но потом создал элементарную программу, типа 2+3 и вывел ответ на экран. Естественно...

Вывод результата - C++
Как вывести результат этой программы в excel, чтобы , то что было в черном окошке , выводилось еще и в екселе? #include &quot;stdafx.h&quot; ...

Корректный вывод результата - C++
Здравствуйте, нужна помощь в корректном(красивый, в данном случае) выводе результата на экран. Написал алгоритм Дейкстры #include...

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

некорректный вывод результата - C++
Суть программы: Пользователь вводит число (например 4), программа печатаем квадрат со сторонами соответственно 4*4 в виде * (звездочек)....

44
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,798
Записей в блоге: 17
21.04.2012, 02:36 #2
Замени
C++
1
char *ar[37];
На
C++
1
std::vector<std::string> ar(37);
Легче работать будет

Добавлено через 2 минуты
И подозремваю что должно работать так
C++
1
 for (int i = 0; i < m; i++) cout << ar[i];
0
zewer
1169 / 863 / 90
Регистрация: 07.01.2011
Сообщений: 6,233
21.04.2012, 16:31  [ТС] #3
есть звездочка или нет, ошибка выбивает все и одно, не могли бы вы ее прокомпилировать у себя на компьютере?
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,798
Записей в блоге: 17
21.04.2012, 17:52 #4
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <conio.h>
#include <iostream>          // Вот так правильно объявлять!
#include <fstream>                
using namespace std;
 
struct List
{
    char ar[100];
};
//---------------------------------------------------------------------------
 
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
 system("chcp 1251");
 
    List *l;
    int h;
    int key = 0;
    int tmp;
    int m = 37;
    char *ar[37];
    ifstream in("1.txt",ios::in); // вставил свой файл со всякой фигней
    cout << "\t\t\tХеш-таблиця № 1\n";
 
    while(in && !in.eof())  // Что если файл не открыт?
    {
        cout << "\n\n";
        l = new List [100];
        in >> l->ar;
        cout << "Зчитане слово: " << l->ar;
        while ( l->ar[key] != NULL )
            key++;
        cout << "\nСлово (ключ) мiстить " << key << " слiв\n";
        h = (7*key)%37;
        cout << "\th(key) = " << h << "\n\n";
        if (ar[h] == NULL)
        {
            ar[h] = l->ar;
            cout << "\tСлово занесено у хеш-таблицю\n";
        }
        else
        {
            cout << "Слово не може бути занесеним у хеш-таблицю, оскiльки виявлено колiзiю\n";
        }
        key = 0;
           delete l; // Надо удалить!!!
    }
    in.close();
    for (int i = 0; i < m; i++)
        cout << *ar[i];
return 0;
}
//---------------------------------------------------------------------------
Текст файла "1.txt"
1dfdgfgfg
2gfgfgfg
3gfg
dfdfdf

Результат
0
Миниатюры
Вывод результата на экран  
Xavier
in god we trust
74 / 74 / 8
Регистрация: 20.04.2012
Сообщений: 201
21.04.2012, 18:09 #5
Не знаю это у тебя только тут опечатка или и в компиляторе ты так пишешь но у тебя в функции main возвращаемое заначение стоит void а должно int
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,798
Записей в блоге: 17
21.04.2012, 18:20 #6
Xavier, это непринципиально, зависит от компилятора
0
Xavier
in god we trust
74 / 74 / 8
Регистрация: 20.04.2012
Сообщений: 201
21.04.2012, 18:28 #7
Не у тебя
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void main ()
{
    setlocale (LC_ALL,"Ukrainian");
    List *l;
    int h;
    int key = 0;
    int tmp;
    int m = 37;
    char *ar[37];
    ifstream in("C:\\data.txt",ios::in);
    cout << "\t\t\tХеш-таблиця № 1\n";
//...
}
Добавлено через 5 минут
Цитата Сообщение от Avazart Посмотреть сообщение
Xavier, это непринципиально, зависит от компилятора
Но это не соответствует стандарту насколько я знаю, следовательно у него могут возникнуть проблемы при переносе кода
0
zewer
1169 / 863 / 90
Регистрация: 07.01.2011
Сообщений: 6,233
21.04.2012, 18:28  [ТС] #8
не совсем понимаю как вы создавали проект, но мой компилятор VS 2010 ругаеться на
C++
1
int _tmain(int argc, _TCHAR* argv[])
я всегда беру ф-ию void main , поскольку она мне ничего не возвращает, зачем туда инт писать?

и так проблема все еще актуальна

я в мейне использовал указатель, из за того, что у меня такая ошибка:

вот в коде:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <conio.h>
#include <iostream>          // Вот так правильно объявлять!
#include <fstream>                
using namespace std;
 
struct List
{
    char ar[100];
};
//---------------------------------------------------------------------------
 
int main()
{
    setlocale (LC_ALL,"Ukrainian");
    //system("chcp 1251");
    List *l;
    int h;
    int key = 0;
    int tmp;
    int m = 37;
    char ar[37];
    for (int i = 0; i < m; i++)
        ar[i] = NULL;
    ifstream in("C:\\data.txt",ios::in); // вставил свой файл со всякой фигней
    cout << "\t\t\tХеш-таблиця № 1\n";
 
    while(in && !in.eof())
    {
        cout << "\n\n";
        l = new List [100];
        in >> l->ar;
        cout << "Зчитане слово: " << l->ar;
        while ( l->ar[key] != NULL )
            key++;
        cout << "\nСлово (ключ) мiстить " << key << " слiв\n";
        h = (7*key)%37;
        cout << "\th(key) = " << h << "\n\n";
        if (ar[h] != NULL)
        {
            ar[h] = l->ar;    // здесь проблема, из за невозможной операции char* и char
            cout << "\tСлово занесено у хеш-таблицю\n";
        }
        else
        {
            cout << "Слово не може бути занесеним у хеш-таблицю, оскiльки виявлено колiзiю\n";
        }
        key = 0;
        delete l;
    }
    in.close();
    for (int i = 0; i < m; i++)
        cout << ar[i];
    return 0;
}


мб помогите решить такую тогда проблему)
0
Xavier
in god we trust
74 / 74 / 8
Регистрация: 20.04.2012
Сообщений: 201
21.04.2012, 18:33 #9
Цитата Сообщение от zewer Посмотреть сообщение
я всегда беру ф-ию void main , поскольку она мне ничего не возвращает, зачем туда инт писать
На будущее использую лучше int main(). По стандарту С++ функция main должна возвращать значение только типа int. Это уже некоторые компиляторы разрешают возвращать void.

у меня в QT твой код запустился но программа вылетает.
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,798
Записей в блоге: 17
21.04.2012, 18:34 #10
C++
1
 ar[h] = l->ar;
А что тут должно происходить?
0
zewer
1169 / 863 / 90
Регистрация: 07.01.2011
Сообщений: 6,233
21.04.2012, 18:45  [ТС] #11
Цитата Сообщение от Xavier Посмотреть сообщение
На будущее использую лучше int main(). По стандарту С++ функция main должна возвращать значение только типа int. Это уже некоторые компиляторы разрешают возвращать void.

у меня в QT твой код запустился но программа вылетает.
в 2 последних рядках ошибка, запусти в пошаговом режиме, или постав брейк пойнт перед последним циклом с выводом масива ar[]

Добавлено через 9 минут
ладно, дам обьяснение по проге:
у меня в файле меститься вот такая инфа:
Kutaev Olexandr Valentynovych 3 7 1993 Kyivstar 0 6 7 1 8 8 9 3 2 8 Lvivska Lviv Tychyny 13 3 IKTA EOM KI-23 21 4 2012
это моя вх последовательность слов (ну типа слова и цифри, но все это будем называть просто - слова), у меня по алгоритму делаеться вычисление к-ва букв в слове(ну или цифр в числах).
Потом по формуле: h = (7*key)%37; где key - к-во этих самых букв (цифр) и запихать в масив под номером h, данное слово. Например:
Kutaev - 6 букв, по формуле h = (7*6)%37 = 42%37 = 5
т.е. в масиве ar[] должно меститься слово Kutaev под номером 6, и когда я вконце пытаюсь вивести масив на экран, у меня происходит crash в проге из за неправильного исполтзования указателей "*", а как подругому сделать без них, я не очень знаю, и что то не получалось.

А причем здесь void main или int main не шарю))))
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,798
Записей в блоге: 17
21.04.2012, 18:47 #12
А причем здесь void main или int main не шарю))))
К соблюдению по возможности стандарта, вместо выдумывания отсебячины
0
zewer
1169 / 863 / 90
Регистрация: 07.01.2011
Сообщений: 6,233
21.04.2012, 18:47  [ТС] #13
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
 ar[h] = l->ar;
А что тут должно происходить?
по адресу l->ar храниться мое слово, которое я узял из файла, и потом я подсчитал его номер, и рядком
C++
1
ar[h] = l->ar;
запихаю слово в масив под номер h
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,798
Записей в блоге: 17
21.04.2012, 18:51 #14
запихаю
Если подразумевается копирование, то это и не должно работать.
0
zewer
1169 / 863 / 90
Регистрация: 07.01.2011
Сообщений: 6,233
21.04.2012, 18:54  [ТС] #15
Цитата Сообщение от Avazart Посмотреть сообщение
Если подразумевается копирование, то это и не должно работать.
ну типо да, перемещаю из масива ar[100](он в структуре висит) в масив ar[], после чего в масив ar[100](он в структуре висит) опять копирую следующее слово из файла, и так далее, аж к концу файла
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2012, 18:54
Привет! Вот еще темы с ответами:

Неправильный вывод результата - C++
Всем Доброго времени суток, извините за такое название темы, другого не придумал.. Проблема в том, что я не могу понять как вывести...

Вывод дробного результата - C++
как сделать так,чтобы если получается дробный результат он и выводился,а не целое число? #include &lt;iostream&gt; using namespace std; ...

не правильный вывод результата - C++
Доброго времени суток! Возникла проблема мне нужно чтобы программа проверяла, представляют ли элементы введенного с клавиатуры массива...

Считывание строки и вывод результата - C++
Строка является корректным идентификатором, если она содержит только строчные или прописные латинские буквы, цифры, символ &quot;_&quot;, и не...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
21.04.2012, 18:54
Ответ Создать тему
Опции темы

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