С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Otoko
0 / 0 / 0
Регистрация: 05.05.2012
Сообщений: 5
1

Программа зависает при загрузке файла

29.05.2012, 22:10. Просмотров 662. Ответов 6
Метки нет (Все метки)

Добрый день. Недавно я написал свою первую программу. Возникла проблема, с которой я не могу разобраться. Программа работает нормально, если запускать ее через компилятор. Но при запуске .exe файла зависает во время загрузки файла. Может кто-нибудь сказать, в чем может быть проблема?

Вот код:
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include <iostream>
#include <string>
#include <Windows.h>
#include <fstream>
using namespace std;
int data1(int dat);
// -------------------------------------------------------------------------------------------
void FilePrint(int t, int n)
{
    string M[2][10] = {{"1_1", "1_2", "1_3", "1_4", "1_5", "1_5", "1_6", "1_7", "1_8", "1_9"}, 
                       {"2_1", "2_2", "2_3", "2_4", "2_5", "2_5", "2_6", "2_7", "2_8", "2_9"}};
    string s, p;
 
    p = "num//"+M[t][n]+".txt";
    ifstream f(p);
    getline(f, s);
    cout << s << endl;
    f.close();  
}
// -------------------------------------------------------------------------------------------
int chislo(string value)
{
    int *a,summa=0;
    char tabl[9][8]={   {'а','и','с','ъ','А','И','С','Ъ'},
                        {'б','й','т','ы','Б','Й','Т','Ы'},
                        {'в','к','у','ь','В','К','У','Ь'},
                        {'г','л','ф','э','Г','Л','Ф','Э'},
                        {'д','м','х','ю','Д','М','Х','Ю'},
                        {'е','н','ц','я','Е','Н','Ц','Я'},
                        {'ё','о','ч',' ','Ё','О','Ч',' '},
                        {'ж','п','ш',' ','Ж','П','Ш',' '},
                        {'з','р','щ',' ','З','Р','Щ',' '},
                    };
    a = (int*)malloc(value.size());
    for (int i=0; i < value.size();i++)
    {
        for(int j=0;j<9;j++)
        {
            for(int k=0;k<8;k++)
            {
                if (value[i]==tabl[j][k])
                {
                    a[i]=j+1;
                }
            }
        }
    }
    for(int i=0;i<value.size();i++)
    {
        summa+=a[i];
    }
    
    return data1(summa);    
}
// -------------------------------------------------------------------------------------------
int data1(int dat)
{
    while(9<dat)
    {
        dat = dat%10+dat/10;
    }
    return dat;
}
// -------------------------------------------------------------------------------------------
void data()
{
    char n;
    int t,m,j;
    cout << "Введите день рождения: ";
    cin >> t;
    cout << "Введите месяц рождения: ";
    cin >> m;
    cout << "Введите год рождения: ";
    cin >> j;
    int x;
    x = data1(t)+data1(m)+data1(j);
    x = data1(x);
    cout << "Число даты рождения равно: " << x << endl;
    FilePrint(1,x-1);
}
// -------------------------------------------------------------------------------------------
 
// -------------------------------------------------------------------------------------------
void imya()
{
    string name,fam;
    cout << "Введите имя: ";
    cin >> name;
    cout << "Введите Фамилию: ";
    cin >> fam;
    int imja;
    imja = chislo(name)+chislo(fam);
    imja = data1(imja);
    cout << "Число имени: " << imja << endl;
    FilePrint(0,imja-1);
}
// -------------------------------------------------------------------------------------------
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int n=0;
    do
    {
        cout << "Введите 1 если хотите найти число имени" << endl;
        cout << "Bведите 2 для числа даты рождения" << endl;
        cout << "Или введите 0 для выхода: ";
        cin >> n;
        if (n == 0)
        {
            return 0;
        }
        else if (n==1)
        {
            system("cls");
            imya();
        }
        else if (n==2)
        {
            system("cls");
            data();
        }
        else
        {
            system("cls");
            cout << "Ошибка ввода, попробуйте еще раз!"<<endl;
        }
    }
    while(n!=1 || n!=2);
    system("pause");
}
Программа для любителей нумерологии. Вырешивает число имени и число даты рождения. Для каждого числа свой файл с описанием, которое потом выводиться в консоли. Для даты и для имени создал отдельные функции. Через .exe файл функция числа даты рождения работает нормально, показывает результат, но функция числа имени как раз таки зависает. помогите, плиз.

P.S.: Программа первая, если корявый код, прошу сильно не пинать )))
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2012, 22:10
Ответы с готовыми решениями:

Зависает программа при вычислении
Здравствуйте. Программа написана на Dev c++. При компиляции происходит...

Программа зависает при очищении памяти
Здраствуйте. Написал программу, вроде работает нормально, только при окончании...

Программа зависает при вводе значения b
Помогите пожалуйста. Когда я в прогарамме ввожу значения b, программа...

При загрузке из файла дублируется запись
Добрый вечер! Не пойму в чем ошибка, дублируется запись при загрузке из файла!...

Не находит символа при загрузке с файла
Доброго времени суток !!! :) Есть задача : Написать программу, которая...

6
defer
558 / 238 / 16
Регистрация: 29.11.2010
Сообщений: 800
30.05.2012, 01:32 2
Цитата Сообщение от Otoko Посмотреть сообщение
Но при запуске .exe файла зависает во время загрузки файла.
очевидно, что у вас файл не там где надо лежит
0
Avazart
Эксперт С++
7764 / 5669 / 555
Регистрация: 10.12.2010
Сообщений: 25,696
Записей в блоге: 17
30.05.2012, 01:41 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void FilePrint(int t, int n)
{
    string M[2][10] = {{"1_1", "1_2", "1_3", "1_4", "1_5", "1_5", "1_6", "1_7", "1_8", "1_9"}, 
                       {"2_1", "2_2", "2_3", "2_4", "2_5", "2_5", "2_6", "2_7", "2_8", "2_9"}};
    string s, p;
 
    p = "num//"+M[t][n]+".txt";
 
    ifstream f(p); // Странно  может ifstream f(p.c_str()); ? 
    if(f) // Проверка открыт ли поток для файла
     {
      getline(f, s);
      cout << s << endl;
      f.close();  
     }
   else cerr<<"Error: file not found!!!"<<endl;
}
Добавлено через 1 минуту
А что хранится в файле что в нем читается только первая строчка?
0
Otoko
0 / 0 / 0
Регистрация: 05.05.2012
Сообщений: 5
30.05.2012, 01:53  [ТС] 4
Цитата Сообщение от defer Посмотреть сообщение
очевидно, что у вас файл не там где надо лежит
вторая часть программы работает нормально, файлы берутся из одной папки.

Добавлено через 5 минут
Цитата Сообщение от Avazart Посмотреть сообщение
А что хранится в файле что в нем читается только первая строчка?
В файле небольшие тексты некоторые в 1 строку, некоторые в 2. Сейчас перепроверил, текст в 1 строку сработал как надо, в две строки не хочет. Вторая часть программы работает нормально, не взирая на то, сколько строк.
0
Avazart
Эксперт С++
7764 / 5669 / 555
Регистрация: 10.12.2010
Сообщений: 25,696
Записей в блоге: 17
30.05.2012, 01:55 5
Повторяю: судя по коду FilePrint() с файла читается только первая строчка и только
0
Otoko
0 / 0 / 0
Регистрация: 05.05.2012
Сообщений: 5
30.05.2012, 10:43  [ТС] 6
Цитата Сообщение от Avazart Посмотреть сообщение
Повторяю: судя по коду FilePrint() с файла читается только первая строчка и только
Я посмотрел по внимательней, и действительно, читается только первая строка. Хотелось бы знать как сделать, чтоб читал весь файл.

И еще, возможно так, что зависание происходит не во время чтения файла?
Вот кусок кода именно этого фрагмента:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void imya()
{
    string name,fam;
    cout << "Введите имя: ";
    cin >> name;
    cout << "Введите Фамилию: ";              // До этого момента программа работает нормально
    cin >> fam;                               // После ввода фамилии нажимаю Enter
    int imja;
    imja = chislo(name)+chislo(fam);
    imja = data1(imja);
    cout << "Число имени: " << imja << endl;  // Вот эту строчку уже не выводит, так как программа зависает
    FilePrint(0,imja-1);
}
может быть проблема в вырешивании переменной imja?
0
Avazart
Эксперт С++
7764 / 5669 / 555
Регистрация: 10.12.2010
Сообщений: 25,696
Записей в блоге: 17
30.05.2012, 14:14 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void imya()
{
    string name,fam;
    cout << "Введите имя: ";
    cin >> name;    cin.sync(); //!!!
    cout << "Введите Фамилию: ";            
    cin >> fam;      cin.sync();   //!!!                    
    int imja;
    imja = chislo(name)+chislo(fam);
    imja = data1(imja);
    cout << "Число имени: " << imja << endl; 
    FilePrint(0,imja-1);
}
1
30.05.2012, 14:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2012, 14:14

Программа зависает при выводе однонаправленного списка
создал однонаправленный список. все компилится, но при попытке вывода - прога...

При передаче ссылки на указатель программа зависает
Почему это не работает (точнее работает но зависает т.к. в set_val_to23()...

Обработка конца строки при загрузке из файла
День добрый. Помогите, пожалуйста. Исходные данные. Есть класс: class...


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

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

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