Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 15

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

14.10.2011, 19:01. Показов 850. Ответов 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 Кб, 13 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.10.2011, 19:01
Ответы с готовыми решениями:

Не работает прога. Помогите
#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...

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

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

6
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
14.10.2011, 21:11
Цитата Сообщение от Гузель Посмотреть сообщение
F = fopen("c:\\1.txt","r");
- ну и чтоже делает программа если аргументов передано более 1-го, хм пытается открыть данный файл c:\\1.txt, а дальше считываем данные из него?А если файла c:\\1.txt нет?
0
Заблокирован
14.10.2011, 21:25
Цитата Сообщение от Гузель Посмотреть сообщение
После ввода в командной строке путь к экзе и набора букв вылетает "Прекращена работа программы 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 / 0
Регистрация: 02.12.2009
Сообщений: 15
14.10.2011, 23:15  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- ну и чтоже делает программа если аргументов передано более 1-го, хм пытается открыть данный файл c:\\1.txt, а дальше считываем данные из него?А если файла c:\\1.txt нет?
я ввожу в командной строке набор букв и он их выводит в обратном порядке, считывает из текст.файла. а если файла нет, то по идее прога не работает

Добавлено через 50 секунд
Цитата Сообщение от Сыроежка Посмотреть сообщение
Не смотрел весь код, но сразу же бросается в глаза, что приведенная выше функция некорректная. Цикл должен начинаться не с strlen(str) - 2, а strlen(str) - 1. То есть если строка содержит всего один символ, то ее длина будет равна 1, а индекс посленднего элемента, то есть в данном случае единственного будет strlen(str) - 1, то есть будет равен 0.
если даже меняешь так как Вы сказали, прога все равно не работает
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
14.10.2011, 23:19
Цитата Сообщение от Гузель Посмотреть сообщение
я ввожу в командной строке набор букв и он их выводит в обратном порядке, считывает из текст.файла. а если файла нет, то по идее прога не работает
вы бы задание толком написали, а то сплошной сумбур
0
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 15
14.10.2011, 23:35  [ТС]
Цитата Сообщение от Jupiter Посмотреть сообщение
вы бы задание толком написали, а то сплошной сумбур
задание во вложении, внизу
0
56 / 56 / 16
Регистрация: 01.08.2011
Сообщений: 141
15.10.2011, 14:59
Вот код, с небольшими комментариями. Измени его в соответствие со своим заданием.
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;
}
А вот результат работы с содержимым файла (содержимое указано в коментах программы)
Миниатюры
помогите плиз, не работает прога  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.10.2011, 14:59
Помогаю со студенческими работами здесь

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

Новичек) не могу написать программу, помогите плиз)
После окончания цикла формирования массива организуйте вывод массива и вывод результатов обработки массива. Результаты, например, могут...

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru