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

не могу найти ошибку, программа ничего не выводит - C++

Восстановить пароль Регистрация
 
eXdi
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 31
01.12.2013, 22:35     не могу найти ошибку, программа ничего не выводит #1
Не выводится комбинация из 5 единиц или нулей, не могу найти ошибку, подскажите пожалуйста, где ошибся
Само задание:
Дана строка, состоящая из групп нулей и единиц, разделенных одним или несколькими пробелами. Найдите и выведите на экран группу из пяти символов, если такая имеется.
Код программы:
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
#include "stdafx.h"
#include <iostream>
#include <fstream> 
#include <string.h>
#include <conio.h>
 
 
using namespace std;
 
void main()
{
    setlocale(LC_ALL, "Russian");
   int i, a, b, k, n;
    char s1[100];
   cout<<"Введите длинну строки S1: ";
   cin>>n;
    cout<<"Введите "<<n<<" символа(-ов): ";
    for (i=0; i<n; i++)
        cin>>s1[i];
for (i=b; i<n; i++){
    a=i;
    k=0; 
    for (i=a; i<n; i++)
    if(s1[i]!=' ') k++;
    else {b=i; break;}
if (k==5){
for (i=a; i<b; i++)
    cout<<s1[i];}}
getch();
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2013, 22:35     не могу найти ошибку, программа ничего не выводит
Посмотрите здесь:

Не правильно работает программа, не могу найти ошибку. C++
Программа для работы со списками с++. Не могу найти ошибку C++
C++ Программа вычисляющая значение функции. не могу найти ошибку
Не могу найти ошибку, при любом значении выводит 1.68729e+038 C++
не работет программа или функция, не могу найти ошибку, ругается не неправильные указатели C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
koldya
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 26
01.12.2013, 22:56     не могу найти ошибку, программа ничего не выводит #2
Вроде бы, что то не так начиная с 21 строчки, где где i присваивается не инициализированное значение
eXdi
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 31
01.12.2013, 23:00  [ТС]     не могу найти ошибку, программа ничего не выводит #3
Цитата Сообщение от koldya Посмотреть сообщение
Вроде бы, что то не так начиная с 21 строчки, где где i присваивается не инициализированное значение
А конкретнее?? Просто пытаюсь разобраться с кодом, но почему-то не нахожу ошибку.
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
01.12.2013, 23:03     не могу найти ошибку, программа ничего не выводит #4
eXdi, в 21 строке вы присваиваете неизвестное значение переменной i, т.к. в b содержится мусор
max_besheniy
25 / 25 / 1
Регистрация: 21.11.2013
Сообщений: 208
01.12.2013, 23:04     не могу найти ошибку, программа ничего не выводит #5
Конкретнее- тебе правильно говорят.Ты присваиваешь i=b, но b у тебя ничему не присваивалось, следовательно там мусор
eXdi
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 31
01.12.2013, 23:10  [ТС]     не могу найти ошибку, программа ничего не выводит #6
Цитата Сообщение от Ryuk Посмотреть сообщение
eXdi, в 21 строке вы присваиваете неизвестное значение переменной i, т.к. в b содержится мусор
Цитата Сообщение от max_besheniy Посмотреть сообщение
Конкретнее- тебе правильно говорят.Ты присваиваешь i=b, но b у тебя ничему не присваивалось, следовательно там мусор
Присвоив начальное значение b=0 изменений не произошло, все так же и осталось, а именно ничего не выводится. Где еще я ошибся?
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
01.12.2013, 23:46     не могу найти ошибку, программа ничего не выводит #7
eXdi, я так понимаю код не ваш? Что вы вводите?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for (i = b; i<n; i++) //пока 0 < n(его вы вводите с клавиатуры) i = i + 1
{
    a = i; //при первой итерации a = 0
    k = 0; 
    for (i = a; i < n; i++) //i = 0 и пока 0 < n i++
        if(s1[i] != ' ') k++;
        else 
        {
            b=i; 
            break;
        }
 
    if (k == 5)
    {
        for (i=a; i<b; i++)
            cout<<s1[i];
    }
}
Добавлено через 27 минут
eXdi, и к тому же у вас ввод неправильный
eXdi
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 31
01.12.2013, 23:50  [ТС]     не могу найти ошибку, программа ничего не выводит #8
Цитата Сообщение от Ryuk Посмотреть сообщение
eXdi, я так понимаю код не ваш? Что вы вводите?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for (i = b; i<n; i++) //пока 0 < n(его вы вводите с клавиатуры) i = i + 1
{
    a = i; //при первой итерации a = 0
    k = 0; 
    for (i = a; i < n; i++) //i = 0 и пока 0 < n i++
        if(s1[i] != ' ') k++;
        else 
        {
            b=i; 
            break;
        }
 
    if (k == 5)
    {
        for (i=a; i<b; i++)
            cout<<s1[i];
    }
}
Добавлено через 27 минут
eXdi, и к тому же у вас ввод неправильный
Код как раз таки мой) был бы не мой, он бы работал и я бы не спрашивал)
так что те пояснения что вы написали я прекрасно знаю)
Я знаю что в нем где что значит, но может я перепутал что-то где-то? потому что у меня почему-то как я не пытался все время ничего не выводится, пробовал различные комбинации. Просто пусто и все, и ничего нету.
Подождите, в смысле ввод не правильный? Можно по подробнее?
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
02.12.2013, 00:04     не могу найти ошибку, программа ничего не выводит #9
eXdi, у вас массив char'ов и в цикле вы вводите ваши строки, но вводите вы их не посимвольно, а через cin*. Как я понимаю ход ваших рассуждений был таков: я ввожу строку к примеру memory, она занимает 6 символов и будет записана от s[0] == 'm' и до s[5] == 'y', но вы вводите каждый раз, и у вас получается, если i = 0 и мы пишем в s[i] - memory, то мы вгоняем как бы в один символ, целую строку, это как вы понимаете неправильно. Либо используйте getline, либо Сишный getchar().
*cin - ввод строки до пробела, остальное остается в памяти. Пример(каждый ввод осуществляется через cin): Введите ваше полное имя: Вася Пупкин. Введите ваш адрес: (и этот ввод программа проигнорирует). Если вы выведете ваше полное имя, оно окажется Вася, а если выведете адрес - Пупкин. cin дает ввод как бы слова, но не целой строки символов
eXdi
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 31
02.12.2013, 00:30  [ТС]     не могу найти ошибку, программа ничего не выводит #10
Цитата Сообщение от Ryuk Посмотреть сообщение
eXdi, у вас массив char'ов и в цикле вы вводите ваши строки, но вводите вы их не посимвольно, а через cin*. Как я понимаю ход ваших рассуждений был таков: я ввожу строку к примеру memory, она занимает 6 символов и будет записана от s[0] == 'm' и до s[5] == 'y', но вы вводите каждый раз, и у вас получается, если i = 0 и мы пишем в s[i] - memory, то мы вгоняем как бы в один символ, целую строку, это как вы понимаете неправильно. Либо используйте getline, либо Сишный getchar().
*cin - ввод строки до пробела, остальное остается в памяти. Пример(каждый ввод осуществляется через cin): Введите ваше полное имя: Вася Пупкин. Введите ваш адрес: (и этот ввод программа проигнорирует). Если вы выведете ваше полное имя, оно окажется Вася, а если выведете адрес - Пупкин. cin дает ввод как бы слова, но не целой строки символов
А не могли бы вы подсказать где и что мне поменять? Просто я делал через cin тоже программу, там заполнение было нормально и все определялось без нареканий. Я просто через getchar еще не разу не пробовал делать.
Т.е. как я понимаю мне надо:
cin>>s1[i]; заменить на s1[i]=getchar();
Или как?
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
02.12.2013, 00:42     не могу найти ошибку, программа ничего не выводит #11
eXdi,
C++
1
2
3
4
5
 for(int j = 0; j < n; j++)
    {
        c = getchar();
        s1[j] = c;
    }
Я в вашем алгоритме особо то и не разбирался, можно было бы по проще переделать.

Добавлено через 8 минут
eXdi, я думаю алгоритм будет понятен, если вам понадобится переписать под любые другие символы:
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 <iostream>
#include <stdio.h>
#include <conio.h>
 
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    int s_null = 0, s_one = 0, n;
    char s1[100], c;
 
    cout<<"Введите длинну строки S1: ";
    cin >> n;
 
    cout<<"Введите "<< n <<" символа(-ов): ";
 
    for(int j = 0; j < n; j++)
    {
        c = getchar();
        s1[j] = c;
 
        if (s1[j] == '1')
            s_one++;
        else if (s1[j] == '0')
            s_null++;
        else
        {
            s_one = 0;
            s_null = 0;
        }
 
        if (s_one == 5)
            cout << "11111\n";
        else if (s_null == 5)
            cout << "00000\n";
 
    }
 
    getch();
 
}
eXdi
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 31
02.12.2013, 00:43  [ТС]     не могу найти ошибку, программа ничего не выводит #12
Цитата Сообщение от Ryuk Посмотреть сообщение
eXdi,
C++
1
2
3
4
5
 for(int j = 0; j < n; j++)
    {
        c = getchar();
        s1[j] = c;
    }
Я в вашем алгоритме особо то и не разбирался, можно было бы по проще переделать.
Ну для меня он понятен)
Но вот что-то я заменил, а программа так и не работает
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
02.12.2013, 00:52     не могу найти ошибку, программа ничего не выводит #13
eXdi, в 11 посте выложил код
eXdi
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 31
02.12.2013, 01:11  [ТС]     не могу найти ошибку, программа ничего не выводит #14
Цитата Сообщение от Ryuk Посмотреть сообщение
eXdi, в 11 посте выложил код
Вашу программу проще описана) У вас просто поиск 5-ти единиц или нулей) В моем же случае из введеннйо комбинации у меня должна вывестись комбинация из пяти символов)) например:
Введено: 0 0110101 01001 1011 001
Вывестись должно: 01001
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
02.12.2013, 07:07     не могу найти ошибку, программа ничего не выводит #15
eXdi, так это еще проще. Если нужен код - сделаю, если хотите сами постараться - постарайтесь
max_besheniy
25 / 25 / 1
Регистрация: 21.11.2013
Сообщений: 208
02.12.2013, 12:57     не могу найти ошибку, программа ничего не выводит #16
Самый простой способ, наверное
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
#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s, s1;
    int n, i;
    getline(cin, s);
    s.push_back(' ');
    n = s.length() - 1;
    i = 0;
    while (i <= n)
    {
        s1.clear();
        while (s[i] != ' ')
        {
            s1 += s[i];
            i++;
        }
        if (s1.length() == 5)
        {
            cout << s1 << endl;
        }
        i++;
    }
    return 0;
}
eXdi
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 31
02.12.2013, 13:18  [ТС]     не могу найти ошибку, программа ничего не выводит #17
max_besheniy, хороший вариант, спасибо) Не могли бы вы пояснить что это значит?) s.push_back(' ');
Ryuk, Проще? А много ли переделывать в моем коде надо? Просто как я понял у меня пробелы не учитывались, то есть если я вводил 1001 10111, то она у меня воспринимала у меня 100110111. Значит я так понимаю мне подредактировать только ввод и все?
max_besheniy
25 / 25 / 1
Регистрация: 21.11.2013
Сообщений: 208
02.12.2013, 13:35     не могу найти ошибку, программа ничего не выводит #18
s.push_back(char) добавляет символ в конец строки. У вас оно воспринимало до первого пробела, при вводе строки так:
cin>>s;
так всегда будет. Поэтому нужно использовать getline(cin,s), так считается все до символа перевода строки
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2013, 13:38     не могу найти ошибку, программа ничего не выводит
Еще ссылки по теме:

Найти ошибку.ничего не происходит при act=3 C++
Программа не компилируется. Не могу найти ошибку C++
C++ Не могу понять ошибку .Не выводит ответ задачи

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

Или воспользуйтесь поиском по форуму:
eXdi
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 31
02.12.2013, 13:38  [ТС]     не могу найти ошибку, программа ничего не выводит #19
Цитата Сообщение от max_besheniy Посмотреть сообщение
s.push_back(char) добавляет символ в конец строки. У вас оно воспринимало до первого пробела, при вводе строки так:
cin>>s;
так всегда будет. Поэтому нужно использовать getline(cin,s), так считается все до символа перевода строки
Спасибо большое)
Yandex
Объявления
02.12.2013, 13:38     не могу найти ошибку, программа ничего не выводит
Ответ Создать тему
Опции темы

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