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

Не получается считать строку с gets - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Программа должна сформировать вектор, элементами которого являются наибольшие элементы всех матриц http://www.cyberforum.ru/cpp-beginners/thread996654.html
Решить задачу, используя функцию. Дана квадратная целочисленная матрица А порядка n. Выделяя на главной диагонали последовательно по одному элементу Aii, можно получить n матриц, ограниченных элементами A11 и Аii. Программа должна сформировать вектор, элементами которого являются наибольшие элементы всех таких матриц. Функция должна возвращать значение наибольшего элемента в матрице...
C++ Классы точка, круг, элипс Добрый вечер) начну с задания: Создать класс точка, имеющая координаты. Класс эллипсов, и класс кругов. Определить иерархию типов. Определить функции печати, конструкторы, деструкторы, вычисление площади. Вот что вышло у меня. #include <iostream> using namespace std; class Point{ public: http://www.cyberforum.ru/cpp-beginners/thread996653.html
Круги в окружности C++
Описать переменную круг, в которой содержатся все данные для построения круга в декартовой системе координат. а) Определить координаты центра, радиус, площадь и длину окружности круга минимального радиуса, который будет содер жать внутри себя все заданные круги. б) Рассматривая окружности попарно, определить координаты ты точек пересечения или точки касания для каждой пары, либо вывести...
C++ Использование указателя на функцию
void treug (float a, float b, float c, int*p) { p=0; if ((a+b>c) || (b+c>a) || (c+a>b)) { p=1; printf ("Treug. sush."); return p; }
C++ Строки http://www.cyberforum.ru/cpp-beginners/thread996637.html
Суть задания состоит в том , что програма должна : загрузить текст из файла в програму и вывести его на екран , потом отыскать все последовательности цифр в тексте и максимальную (может быть несколько с максимальной длинной) выделить другим цветом .Кроме этого в програме должны быть использованы структуры. Мучусь уже третий день, завтра надо здавать. Очень прошу , помогите. Вот то что смог...
C++ вычислить параметрический несобственный интеграл Добрый день. Я в теме http://www.cyberforum.ru/numerical-methods/thread988806.html спрашивал как со стороны математики вычислить интеграл: \int_{x_0}^{\infty} (e^{-4x}(32/x+32/x^2+16/x^3+4/x^4)/\sqrt{1-l^2/a^2x^2+2(1+1/x)e^{-2x}}) dx Разобрался, преобразовал интеграл, разбил на два, но к сожалению, созданная программа не верно выдаёт ответ. А именно, то что выдаётся в ответе:... подробнее

Показать сообщение отдельно
McSimov
0 / 0 / 0
Регистрация: 22.10.2013
Сообщений: 17

Не получается считать строку с gets - C++

03.11.2013, 22:31. Просмотров 260. Ответов 1
Метки (Все метки)

Имеется (казалось бы доведенная до ума более или менее) программа:

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
136
137
138
#include "stdio.h"
#include "conio.h"
#include "math.h"
#include "string.h"
#include "stdafx.h"
#include <iostream>
 
 
struct word  //пользовательский тип с атрибутами слова в строке - координаты начала и конца и длина
{
    int b,e,l;
};
 
float dist(float a[],int i,int r) //функция вычисления расстояния
{
    float dst=0;
       
    int end=r;
    
    for(int j=0;j<end ;j++)
        dst+=fabs(a[i]-a[j]);
    return dst;
}
 
 
int main() 
{
    
    float* a;    //объявление указателя на float
    int n;       //его размер
    float minr=0;  //минимум расстояния
    int minc=0;    //индекс самого близкого к соседям элемента
 
    char st[359];   //исходная строка
    int k=1;        //число слов в строке,изначально с учетом последнего слова
    int* wrds;      //указатель на int
    word* arw;      //указатель на пользовательский тип
//Задание 1. Поиск элемента с наименьшим расстоянием до других
    printf("Enter number of array elms: ");  //приглашение на ввод количества элементов массива
    scanf_s("%d",  &n);
    printf("\n");                            //считывание с клавиатуры количества элементов
    a = new float[n];                        //динамическое выделение  памяти для массива n элементов
    printf("Fill your array\n");             //заполнение массива
    for(int i=0;i<n;i++)
        scanf_s("%f", &a[i]);
 
    int p=0;
    for(int i=0;i<n;i++)
        if(dist(a,i,n)<dist(a,p,n))
        {
            minr=dist(a,i,n);
            minc=i;
            p=i;
        }
 
    printf("The element # %d has the least distance. The distance is %5.2f\n", minc, minr);
    delete[] a;  //удаление массива
    
//Задание 2. Вывод слов строки по увеличению количества букв
    printf("Enter your string: ");             //приглашение на ввод строки  
    gets_s(st);                                 //считывание с клавиатуры строки
    printf("\n");                                                  
    printf("String %s\n ",st);
    
    while(strlen(st)>200)                      //защита от дураков
    {
        printf(" You have broken my program \n that was awfully nice of you,try again \n");
        gets_s(st);
    }
                                        
    for(unsigned int i=0;i<strlen(st);i++)       //узнаем число слов
    {
        if (st[i]==' ') k++;
    }
    printf("Words %d\n",k);
    wrds = new int[k-1];    //выделяем память под массив
                            //формируем массив, элементы которого - координаты пробелов
    int j=0;
    while(j<k-1)
    {
        for(unsigned int i=0;i<strlen(st);i++)
            if (st[i]==' ')
            {
                wrds[j]=i;
                j++;        
            }
    }
    arw = new word[k];    //массив структур с атрибутами слов
 
    arw[0].b=0;           //заполняем  массив, 1й и последний элементы отдельно, остальные в цикле
    arw[0].e=wrds[0]-1;
    arw[0].l=wrds[0];
 
    arw[k-1].b=wrds[k-2]+1;
    arw[k-1].e=strlen(st);
    arw[k-1].l=strlen(st)-wrds[k-2]-1;
 
    j=0;
    for(int i=1;i<k-1;i++)
    {
        arw[i].b=wrds[j]+1;
        arw[i].e=wrds[j+1]-1;
        arw[i].l=arw[i].e-arw[i].b;
        j++;
    }
    
 
    word buf={0,0,0};      //сортируем массив по убыванию длины слова
    for(int i=0;i<k;i++)
            for( int j=0;j<k;j++)
                if(arw[i].l>arw[j].l)
                {
                    buf.b=arw[i].b;
                    buf.e=arw[i].e;
                    buf.l=arw[i].l;
 
                    arw[i].b=arw[j].b;
                    arw[i].e=arw[j].e;
                    arw[i].l=arw[j].l;
 
                    arw[j].b=buf.b;
                    arw[j].e=buf.e;
                    arw[j].l=buf.l;
                }
 
    printf("Words sorted by decreasing order: \n");  //вывод слов строки по убыванию длины
    for(int i=0;i<k;i++)
    {
        for(int j=arw[i].b;j<=arw[i].e;j++)
            printf("%c", st[j]);
        printf("\n");
    }
 
    delete[] wrds;
    delete[] arw;
    return 0;
 
}
Однако возникает проблема: не работает вторая ее часть, как исполнение доходит до gets, строка не считывается и даже не позволяется ее ввести. Если закомментить первую часть, то часть вторая работает верно. Даже и не знаю, в чем тут дело. Может быть что-то неправильное я творю с динамической памятью в первой части, а может не знаю каких-то нюансов работы с gets. Помогите, пожалуйста, разобраться в чем же дело.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru