Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 1
Регистрация: 30.09.2013
Сообщений: 31
1

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

01.12.2013, 22:35. Показов 2393. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не выводится комбинация из 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();
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2013, 22:35
Ответы с готовыми решениями:

Php регистрация , не могу найти ошибку. Код выполняется, но в базу данных ничего не добавляется
&lt;?php if (isset($_POST)) { $login= htmlspecialchars($_POST);...

Не могу найти ошибку, при любом значении выводит 1.68729e+038
нахождение значения выражения Р=1/1*2 + 1/2*3 + ... + 1/n*(n+1) #include...

Не могу найти ошибку в коде, не понимаю, почему выводит какими-то странными иероглифами
#define _CRT_SECURE_NO_WARNINGS #define NOMINMAX #include &lt;iostream&gt; #include &lt;cstdio&gt; #include...

Программа ничего не выводит
При компиляции ничего не выводит #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt;...

18
0 / 0 / 1
Регистрация: 24.01.2013
Сообщений: 26
01.12.2013, 22:56 2
Вроде бы, что то не так начиная с 21 строчки, где где i присваивается не инициализированное значение
0
0 / 0 / 1
Регистрация: 30.09.2013
Сообщений: 31
01.12.2013, 23:00  [ТС] 3
Цитата Сообщение от koldya Посмотреть сообщение
Вроде бы, что то не так начиная с 21 строчки, где где i присваивается не инициализированное значение
А конкретнее?? Просто пытаюсь разобраться с кодом, но почему-то не нахожу ошибку.
0
183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871
01.12.2013, 23:03 4
eXdi, в 21 строке вы присваиваете неизвестное значение переменной i, т.к. в b содержится мусор
0
25 / 25 / 5
Регистрация: 21.11.2013
Сообщений: 208
01.12.2013, 23:04 5
Конкретнее- тебе правильно говорят.Ты присваиваешь i=b, но b у тебя ничему не присваивалось, следовательно там мусор
0
0 / 0 / 1
Регистрация: 30.09.2013
Сообщений: 31
01.12.2013, 23:10  [ТС] 6
Цитата Сообщение от Ryuk Посмотреть сообщение
eXdi, в 21 строке вы присваиваете неизвестное значение переменной i, т.к. в b содержится мусор
Цитата Сообщение от max_besheniy Посмотреть сообщение
Конкретнее- тебе правильно говорят.Ты присваиваешь i=b, но b у тебя ничему не присваивалось, следовательно там мусор
Присвоив начальное значение b=0 изменений не произошло, все так же и осталось, а именно ничего не выводится. Где еще я ошибся?
0
183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871
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, и к тому же у вас ввод неправильный
0
0 / 0 / 1
Регистрация: 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, и к тому же у вас ввод неправильный
Код как раз таки мой) был бы не мой, он бы работал и я бы не спрашивал)
так что те пояснения что вы написали я прекрасно знаю)
Я знаю что в нем где что значит, но может я перепутал что-то где-то? потому что у меня почему-то как я не пытался все время ничего не выводится, пробовал различные комбинации. Просто пусто и все, и ничего нету.
Подождите, в смысле ввод не правильный? Можно по подробнее?
0
183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871
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 дает ввод как бы слова, но не целой строки символов
1
0 / 0 / 1
Регистрация: 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();
Или как?
0
183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871
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();
 
}
0
0 / 0 / 1
Регистрация: 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;
    }
Я в вашем алгоритме особо то и не разбирался, можно было бы по проще переделать.
Ну для меня он понятен)
Но вот что-то я заменил, а программа так и не работает
0
183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871
02.12.2013, 00:52 13
eXdi, в 11 посте выложил код
0
0 / 0 / 1
Регистрация: 30.09.2013
Сообщений: 31
02.12.2013, 01:11  [ТС] 14
Цитата Сообщение от Ryuk Посмотреть сообщение
eXdi, в 11 посте выложил код
Вашу программу проще описана) У вас просто поиск 5-ти единиц или нулей) В моем же случае из введеннйо комбинации у меня должна вывестись комбинация из пяти символов)) например:
Введено: 0 0110101 01001 1011 001
Вывестись должно: 01001
0
183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871
02.12.2013, 07:07 15
eXdi, так это еще проще. Если нужен код - сделаю, если хотите сами постараться - постарайтесь
1
25 / 25 / 5
Регистрация: 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;
}
1
0 / 0 / 1
Регистрация: 30.09.2013
Сообщений: 31
02.12.2013, 13:18  [ТС] 17
max_besheniy, хороший вариант, спасибо) Не могли бы вы пояснить что это значит?) s.push_back(' ');
Ryuk, Проще? А много ли переделывать в моем коде надо? Просто как я понял у меня пробелы не учитывались, то есть если я вводил 1001 10111, то она у меня воспринимала у меня 100110111. Значит я так понимаю мне подредактировать только ввод и все?
0
25 / 25 / 5
Регистрация: 21.11.2013
Сообщений: 208
02.12.2013, 13:35 18
s.push_back(char) добавляет символ в конец строки. У вас оно воспринимало до первого пробела, при вводе строки так:
cin>>s;
так всегда будет. Поэтому нужно использовать getline(cin,s), так считается все до символа перевода строки
1
0 / 0 / 1
Регистрация: 30.09.2013
Сообщений: 31
02.12.2013, 13:38  [ТС] 19
Цитата Сообщение от max_besheniy Посмотреть сообщение
s.push_back(char) добавляет символ в конец строки. У вас оно воспринимало до первого пробела, при вводе строки так:
cin>>s;
так всегда будет. Поэтому нужно использовать getline(cin,s), так считается все до символа перевода строки
Спасибо большое)
0
02.12.2013, 13:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2013, 13:38
Помогаю со студенческими работами здесь

Программа не выводит ничего
Собственно начал изучать NASM но у меня не выводится в этой программе ничего global _start ...

Программа ничего не выводит
program p1; var s: string; n, i: byte; begin readln (s); readln (n); for i:=1 to length(s) do...

Программа ничего не выводит
Здравствуйте, помогите, пожалуйста. Программа компилируется нормально, ошибок компилятор не выдает....

Программа ничего не выводит на экран
#include &lt;stdio.h&gt; int N,M; int a; int KP,KV; int o,oN,t; int i,j; void next(int x){ ...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru