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

помогите плиз, не работает прога - C++

Восстановить пароль Регистрация
 
Гузель
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 15
14.10.2011, 19:01     помогите плиз, не работает прога #1
После ввода в командной строке путь к экзе и набора букв вылетает "Прекращена работа программы si.exe". ОС windows 7, неужели из-за этого? задание во вложении
вот код проги
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printreverse(char *str) 
{
    int i;
    for(i = strlen(str) - 2;i >= 0; i--)
    printf("%c",str[i]);
}
int main(int argc, char *argv[])
{
  
    if(argc == 1)
    {
        printf("Vy ne peredali parametr iz komandnoj stroki\n");
        return 0;
    }
    char dir[40] = "c:\\1.txt"; 
    int n; 
    char *buf,bb; 
    FILE *F = NULL;
    F = fopen("c:\\1.txt","r"); 
    while(!feof(F)) 
    {
        buf = (char*)malloc(sizeof(char)); 
        buf[0] = '\0';
        while(!feof(F)) 
        {
            n = strlen(buf); 
            bb = fgetc(F); 
            if(bb == '\n') break; 
            buf = (char*)realloc(buf,sizeof(char)*(n+2));
            buf[strlen(buf)+1] = '\0'; 
            buf[strlen(buf)] = bb; 
        }
        if(strstr(buf,argv[1]) != NULL) {printreverse(buf);printf("\n");
        } 
        free(buf); 
 
    }
    fclose(F); 
    
    return 0; 
}
Вложения
Тип файла: rar Doc1.rar (144.0 Кб, 12 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2011, 19:01     помогите плиз, не работает прога
Посмотрите здесь:

немогу никак понять в чем ошибка=(помогите плиз! C++
C++ Списки (Помогите плиз)
C++ Помогите плиз, как вывести это чудо на экран?
Помогите студенту плиз C++
C++ Не работает прога. Помогите
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
14.10.2011, 21:11     помогите плиз, не работает прога #2
Цитата Сообщение от Гузель Посмотреть сообщение
F = fopen("c:\\1.txt","r");
- ну и чтоже делает программа если аргументов передано более 1-го, хм пытается открыть данный файл c:\\1.txt, а дальше считываем данные из него?А если файла c:\\1.txt нет?
Сыроежка
Заблокирован
14.10.2011, 21:25     помогите плиз, не работает прога #3
Цитата Сообщение от Гузель Посмотреть сообщение
После ввода в командной строке путь к экзе и набора букв вылетает "Прекращена работа программы si.exe". ОС windows 7, неужели из-за этого? задание во вложении
вот код проги
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printreverse(char *str) 
{
    int i;
    for(i = strlen(str) - 2;i >= 0; i--)
    printf("%c",str[i]);
}
}
Не смотрел весь код, но сразу же бросается в глаза, что приведенная выше функция некорректная. Цикл должен начинаться не с strlen(str) - 2, а strlen(str) - 1. То есть если строка содержит всего один символ, то ее длина будет равна 1, а индекс посленднего элемента, то есть в данном случае единственного будет strlen(str) - 1, то есть будет равен 0.
Гузель
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 15
14.10.2011, 23:15  [ТС]     помогите плиз, не работает прога #4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- ну и чтоже делает программа если аргументов передано более 1-го, хм пытается открыть данный файл c:\\1.txt, а дальше считываем данные из него?А если файла c:\\1.txt нет?
я ввожу в командной строке набор букв и он их выводит в обратном порядке, считывает из текст.файла. а если файла нет, то по идее прога не работает

Добавлено через 50 секунд
Цитата Сообщение от Сыроежка Посмотреть сообщение
Не смотрел весь код, но сразу же бросается в глаза, что приведенная выше функция некорректная. Цикл должен начинаться не с strlen(str) - 2, а strlen(str) - 1. То есть если строка содержит всего один символ, то ее длина будет равна 1, а индекс посленднего элемента, то есть в данном случае единственного будет strlen(str) - 1, то есть будет равен 0.
если даже меняешь так как Вы сказали, прога все равно не работает
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
14.10.2011, 23:19     помогите плиз, не работает прога #5
Цитата Сообщение от Гузель Посмотреть сообщение
я ввожу в командной строке набор букв и он их выводит в обратном порядке, считывает из текст.файла. а если файла нет, то по идее прога не работает
вы бы задание толком написали, а то сплошной сумбур
Гузель
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 15
14.10.2011, 23:35  [ТС]     помогите плиз, не работает прога #6
Цитата Сообщение от Jupiter Посмотреть сообщение
вы бы задание толком написали, а то сплошной сумбур
задание во вложении, внизу
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2011, 14:59     помогите плиз, не работает прога
Еще ссылки по теме:

Помогите плиз с алгоритмом проги (нужно отсортировать матрицу) C++
Новичек) не могу написать программу, помогите плиз) C++
C++ Помогите написать программу, плиз...

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

Или воспользуйтесь поиском по форуму:
Ree.exe
56 / 56 / 4
Регистрация: 01.08.2011
Сообщений: 141
15.10.2011, 14:59     помогите плиз, не работает прога #7
Вот код, с небольшими комментариями. Измени его в соответствие со своим заданием.
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
132
133
134
135
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<fstream>
 
using namespace std;
 
void printreverse(char *str) ;
char** AddStr(char** pbuf, char* buf,int m);
 
int main()
{
    setlocale(LC_ALL,"");
 
 
    fstream File("text.txt");
    if(!File.is_open())
    {
        cout<<"Файл не найден, создаем и записываем";
        exit(1);
    }
    //Допустим в файле эти строки:
 
    //Helloy word
    //77890
    //llo
    //lloooof
 
    char buf[255];           /*Буфер дляя записи строк из файла               */
    char **pbuf = NULL;      /*Указатель на все строки содержащие подстроки   */
    int m=0;                 /*Количество строк в указателе pbuf             */
    char you_str[255]="llo"; /*заданная подстрока                             */
       
 
 
    while(!File.eof())
    {
        File.getline(buf,255,'\n');  //чтение строки из файла
 
        int a=-1;
        unsigned int i=0,j,k;
 
        //Поиск строки файла с заданной подстракой
        while ( i < strlen(buf) && a!=strlen(you_str))
        {
            if(buf[i]==you_str[0])
            {
                k=i;
                j = 1;
                while( j<strlen(you_str) && (k+j)<strlen(buf) )
                    if(buf[k+j]==you_str[j])
                    {
                        j++;
                        a=j;
                    }
                    else
                        break;
            }
            i++;
        }
        if(a == strlen(you_str))
        {
            m++;
            pbuf=AddStr(pbuf,buf,m);
        }
    }
 
    File.close();
 
 
    if(pbuf)
        for(int i=0; i<m; i++)
            printreverse(pbuf[i]);
    else
        cout<<"Нет строк где встречается заданная подстрока!";
 
    for(int i=0; i<m; i++)
        delete [] pbuf[i];
    delete [] pbuf;
 
 
    return 0; 
}
void printreverse(char *str) 
{
        int i;
        for(i = strlen(str)-1;i >=0; i--)
            cout<<str[i];
        cout<<endl;
}
 
char** AddStr(char** pbuf, char* buf, int m)
{
    if(m<2)
    {
        pbuf = new char*[1];
        pbuf[0]=new char[strlen(buf)+1];
        strcpy(pbuf[0],buf);
    }
    else
    {
        //Для копирования содержимого из pbuf.
        char** f = new char*[m-1];
 
        //Собственно копированеи содержимого pbuf в f
        for(int i=0; i < m-1; i++)
        {
            f[i] = new char [strlen(pbuf[i])+1];
            strcpy(f[i],pbuf[i]);
        }
 
        // Полная очистка pbuf**
        for(int i=0; i<m-1;i++)
            delete [] pbuf[i];
        delete []  pbuf;
 
        //Выделение  памяти на массив строк. 
        pbuf = new char*[m];
        // Загоняю туду последнию найденую строку первым элементом.
        pbuf[0]=new char[strlen(buf)+1];
        strcpy(pbuf[0],buf);
 
        //Загоняю туду до этого найденые строки 
        for(int i=1; i<m;i++)
        {
            pbuf[i]=new char[strlen(f[i-1])+1];
            strcpy(pbuf[i],f[i-1]);
        }
 
        //Удаляю все в  вспомогат. мас. 
        for(int i=0; i<m-1; i++)
            delete [] f[i];
        delete [] f;
    }
    return pbuf;
}
А вот результат работы с содержимым файла (содержимое указано в коментах программы)
Миниатюры
помогите плиз, не работает прога  
Yandex
Объявления
15.10.2011, 14:59     помогите плиз, не работает прога
Ответ Создать тему
Опции темы

Текущее время: 08:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru