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

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

Войти
Регистрация
Восстановить пароль
 
Гузель
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 15
#1

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

14.10.2011, 19:01. Просмотров 528. Ответов 6
Метки нет (Все метки)

После ввода в командной строке путь к экзе и набора букв вылетает "Прекращена работа программы 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++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; #include &lt;stdlib.h&gt; float f1(float); float f2(float); float...

Помогите студенту плиз - C++
Было дано задание-&quot;Подобрать несколько примеров тем программных продуктов&quot;. Задание корявое, в следствии- на ум ничего вообще не приходит. ...

Списки (Помогите плиз) - C++
1)Линейный упорядоченный список с удалением,нахождением и вставкой элемента. 2)Список списков(список состоит из заголовков списков) ...

Помогите написать программу, плиз... - C++
Цель работы:Дана функция, заданная бесконечным рядом. С клавиатуры вводятся x и e(e - точность 0,001 - 0,00001), нужно вычислить...

Новичек) не могу написать программу, помогите плиз) - 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
Каратель
Эксперт С++
6553 / 3973 / 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 Посмотреть сообщение
вы бы задание толком написали, а то сплошной сумбур
задание во вложении, внизу
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;
}
А вот результат работы с содержимым файла (содержимое указано в коментах программы)
Миниатюры
помогите плиз, не работает прога  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2011, 14:59
Привет! Вот еще темы с ответами:

Помогите плиз с алгоритмом проги (переставить слова в строке) - C++
Задача: В заданном тексте поменять местами каждые два соседних слова. Но нужно сделать, не используя библиотеки string. Допустим...

Помогите плиз, как вывести это чудо на экран? - C++
Верхний вывожу из звездочек с помощью цикла, а как нижний вывести вместе с верхним никак не пойму вот верхний #include &lt;iostream&gt; ...

немогу никак понять в чем ошибка=(помогите плиз! - C++
есть вот такой вот код : #include &lt;iostream.h&gt; #include &lt;math.h&gt; void main(void) { int...

не запускается прога, помогите! - C++
Программа порождает два процесса, один процесс пишет в неименованный канал, другой считывает из него информацию. #pragma hdrstop ...


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

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

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