Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Железо
0 / 0 / 0
Регистрация: 24.08.2009
Сообщений: 15
#1

Ошибка с использованием while - C++

01.09.2009, 15:58. Просмотров 1629. Ответов 32
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream.h>
#include <stdio.h>
 
char f1(int x) {return (char)x;}
 
int main()
{
    
    int a;
    int b=0;
    while (b=0)
    {
    cout<<"Put a value:\n";
    cin>>a; 
    cout<<"\nb = "<<f1(a);
    cout<<"\nNext - 0,Exit - 1\n";
    cin>>b;
    cout<<"\n";
    }
    getchar();
    return 0;
}
На сколько я знаю, while выполняется до тех пор пока условие истинно, но у меня ни разу не выполняется . В чем ошибка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2009, 15:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка с использованием while (C++):

Что за ошибка с использованием cstdio? - C++
Вот код: #include &lt;cstdio&gt; #include &lt;clocale&gt; using namespace std; int main() { setlocale(LC_ALL,&quot;Russian&quot;); double...

Ошибка в программе с использованием функций - C++
#include &lt;stdio.h&gt;//подключение #include &lt;conio.h&gt;//необходимых #include &lt;locale&gt;//библиотек #include &lt;time.h&gt; void...

Ошибка записи в файл с использованием ifstream - C++
Здравствуйте! Я использую visual studio и у меня вылазит ошибка при компилировании следущего кода, а в Borland все работало: Main.cpp ...

Ошибка в функции, связанная с использованием памяти - C++
Все доброго времени суток. Помогите, пожалуйста, найти ошибку в моей функции: #include &lt;wchar.h&gt; #include &quot;functions.h&quot; // файл...

Ошибка при запуске приложение с использованием ffmpeg - C++
Надо по учебе написать программу, которое видео будет разрезать на кадры. Для этого решил использовать библиотеку ffmpeg, полдня подключал...

Ошибка при переборе массива с использованием указателей - C++
Собственно сабж. Есть код int m = {4,5,46,57,35,65,35,55,45,95}; for (int *p = &amp;m; p&lt;&amp;m; p++) { cout &lt;&lt; m &lt;&lt;...

32
RNT
Автор FAQ
3135 / 355 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
01.09.2009, 22:35 #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
void dec2bin(int x)
{
    char pr[11]="000000000";
    int i=9;
    while ((x>0) && (x!=0))
    {
        if (x%2)
            pr[i]='1';
        else
            pr[i]='0';
        x=x/2;
        i--;
    }
    cout << pr;
}
 
void main(int argc, char *argv[])
{
    int a;
    cin >> a;
    dec2bin(a);
    cin >> a;
}
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,849
02.09.2009, 10:26 #17
Цитата Сообщение от RNT Посмотреть сообщение
while ((x>0) && (x!=0))
Если х больше нуля, наверное х не равен нулю. С какой целью два условия?
0
RNT
Автор FAQ
3135 / 355 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
02.09.2009, 10:30 #18
while ((x>0) && (x!=0))
Ошибочка , так правильнее:
C++
1
while ((x>0) && (i>=0))
0
Gravity
564 / 558 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
02.09.2009, 10:43 #19
Код
void dec2bin(int x)
{
        char pr[11]="000000000";
        int i=9;
        while ((x>0) && (x!=0))
        {
                if (x%2)
                        pr[i]='1';
                else
                        pr[i]='0';
                x=x/2;
                i--;
        }
        cout << pr;
}
Можно еще сократить
C++
1
2
3
4
5
6
7
void dec2bin(int x)
{
    char pr[11]="000000000";
    for(int i = 9; x > 0 && i >= 0; i--, x /= 2)
        (x%2) ? pr[i]='1' : pr[i]='0';
    cout << pr;
}
0
Железо
0 / 0 / 0
Регистрация: 24.08.2009
Сообщений: 15
02.09.2009, 10:57  [ТС] #20
Цитата Сообщение от RNT Посмотреть сообщение
if (x%2)
мне вот это место не понятно, тут же еще условие должно быть, или я ошибаюсь?
Допустим
C++
1
if (x%2==1)
Добавлено через 1 минуту
А так вроде хорошо придумано, есть, так сказать, над чем думать
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,849
02.09.2009, 11:16 #21
Ещё один забавный способ выводить числа в двоичном виде
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <limits.h>
 
#define ROW_LEN 80 /* длинна строки */
 
/* Печать десятичного числа в двоичном виде */
void dec2bin(int x){
    int i;
    for ( i = (sizeof(int) * CHAR_BIT - 1); i >= 0; i-- )
        putchar(((x & (1 << i)) != 0) + '0' );
    putchar('\n');
}
 
int main(){
    int i;
    char buf[ROW_LEN];
    
    while ( fgets(buf, ROW_LEN, stdin) )
        if ( i = atoi(buf) )
            dec2bin(i);
    
    return(0);
}
1
RNT
Автор FAQ
3135 / 355 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
02.09.2009, 12:00 #22
if (x%2)
мне вот это место не понятно, тут же еще условие должно быть, или я ошибаюсь?
В языке С++ истинным считается любое ненулевое значение.
Результат x%2 может быть либо 0 либо 1 , либо false либо true.
Ничего лишнего писать не надо.
1
Железо
0 / 0 / 0
Регистрация: 24.08.2009
Сообщений: 15
02.09.2009, 12:19  [ТС] #23
Цитата Сообщение от easybudda Посмотреть сообщение
щё один забавный способ выводить числа в двоичном виде
Да я видел разные способы перевода, просто пока для меня не очень понятно, я своими силами пытаюсь
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,849
02.09.2009, 21:05 #24
Цитата Сообщение от Железо Посмотреть сообщение
Да я видел разные способы перевода, просто пока для меня не очень понятно, я своими силами пытаюсь
Про алгоритм перевода вот тут рассказывают (даже читать не прийдётся ) а вариантов море... Вот пример с рекурсией:
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
#include <stdio.h>
 
#define ROW_LEN 80 /* длинна строки */
 
/* Печать десятичного числа в двоичном виде - рекурсивная версия */
void dec2bin(int x){
    if ( x/2 )
        dec2bin(x/2);
    putchar((x % 2) + '0');
}
 
int main(){
    int i;
    char buf[ROW_LEN];
    
    while ( fgets(buf, ROW_LEN, stdin) ){
        if ( i = atoi(buf) ){
            dec2bin(i);
            putchar('\n');
        }
    }
    
    return(0);
}
Не особо корректный - не работает с отрицательными числами, но как учебный сойдёт, я думаю...
0
Железо
0 / 0 / 0
Регистрация: 24.08.2009
Сообщений: 15
03.09.2009, 10:01  [ТС] #25
Ну вот вобщем, двоичная и десятичная вполне достаточно пока...

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
#include <iostream.h>
#include <stdio.h>
 
void dec2bin(int x)
{
    char pr[11]="000000000";
    for(int i = 9; x > 0 && i >= 0; i--, x /= 2)
        (x%2) ? pr[i]='1' : pr[i]='0';
    cout << pr;
}
 
int step(int osn, int pkz)
{
    int res=1;
    
    for(int i=1;i<=pkz;i++)
        res=res*osn;
    return res;
}
 
 
 
void bin2dec(int x)
{
    int res=0;
    for(int i=0;(x/10)>0;i++,x=x/10)    
    res=res+(x%10)*step(2,i);
    cout<<res+1*step(2,i);
}
 
 
 
int main()
{
    int a;
    cout<<"Put 'a'(dec) Value:\n";
    cin>>a;
    dec2bin(a);
    cout<<"\nPut 'a'(bin) Value:\n";
    cin>>a;
    bin2dec(a);
    cout<<'\n';
    cin>>a;
    return 0;
}
Сейчас буду думать с 16чной

Добавлено через 12 минут
хотя, маленько намудрил со степенью ) можно и полегчес делать:

C++
1
2
3
4
5
6
int step(int osn, int pkz)
{
    for(int res=1;pkz>0;pkz--)
        res=res*osn;
    return res;
}
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,849
03.09.2009, 11:12 #26
Цитата Сообщение от Железо Посмотреть сообщение
хотя, маленько намудрил со степенью...
А чем функция pow из math.h не понравилась?

И с 16-ричной тоже всё давно придумано
printf("%x", int_var);
0
Железо
0 / 0 / 0
Регистрация: 24.08.2009
Сообщений: 15
03.09.2009, 11:43  [ТС] #27
ну надо же разобраться как это всё придумали
0
RNT
Автор FAQ
3135 / 355 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
03.09.2009, 11:54 #28
Проще некуда
C++
1
2
3
4
5
6
7
8
void dec2bin(int x)
{
    if (x)
    {
        dec2bin(x/2);
        printf("%i", x%2);
    }
}
0
Железо
0 / 0 / 0
Регистрация: 24.08.2009
Сообщений: 15
03.09.2009, 12:59  [ТС] #29
оО я тока пока не понимаю, как функция сама в себе вызывается
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,849
03.09.2009, 13:05 #30
Цитата Сообщение от Железо Посмотреть сообщение
оО я тока пока не понимаю, как функция сама в себе вызывается
6 постами ранее до боли похожий пример приводил. В гугле по слову "рекурсия" поищите Ну или вот для примера...
0
03.09.2009, 13:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2009, 13:05
Привет! Вот еще темы с ответами:

Ошибка с видимостью блока с использованием булева значения - C++
Всем привет! Друзья, нужна помощь! Не могу сдать работу из-за ошибки. У меня при выполнении кода возникает error, связанная с видимостью...

В чем ошибка? программа с использованием контейнера list - C++
/*Написать программу,моделирующую управление каталогом в файловой сис* теме. Для каждого файла в каталоге содержатся следующие...

Ошибка при создании функции с использованием Args& - C++
При создании Wrapper возникает ошибка. Вроде до этого делал точно так-же и все работало. Чувствует мое сердце где-то я сделал что-то не...

Удаление комментариев из текста программы с использованием STL, ошибка при выполнении - C++
Здравствуйте решал задачу с использованием STL из книги Страуструпа 6.22 возникла проблема программа вылетает, помогите пожалуйста...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

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