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

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

Войти
Регистрация
Восстановить пароль
 
l2ded
80 / 68 / 11
Регистрация: 10.05.2011
Сообщений: 284
#1

Поясните детский пример - C++

07.09.2012, 12:42. Просмотров 723. Ответов 10
Метки нет (Все метки)

Подскажите почему не работает.
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
#include <iostream>
#include <cstdlib>
using namespace std;
void printBinary(const unsigned char val) {
    for(int i =7; i>=0; i--)
    if(val &(1<<i))
        std::cout<<"1";
    else
        std::cout<<"0";
    }
 
int main(int argc,char*argv[]){ 
    
  if (argc!=2) { // argc = 1 всегда
    cout << "Must provide a number "<<endl;
    exit(1);
   }
        double d=atof(argv[1]);//почему когда я передаю argv[1] выводит ошибку? ошибка памяти адреса?
    unsigned char*cp =reinterpret_cast<unsigned char*>(&d);
    for (int i=sizeof(double)-1; i>=0; i-=2) {
    printBinary(cp[i-1]);
    printBinary(cp[i]);
    }
    return 0;
}
argv[1] - что это такое?
массив, но мы же не указываем его размерность, но если он динамически то .... обьясните
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2012, 12:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поясните детский пример (C++):

Поясните алгоритм! - C++
Задано натуральное число N. Вывести на экран все пары натуральных чисел A&gt;10, B&gt;A таких, что значение произведения A*B&lt;N не изменится, если...

Поясните код - C++
double **a = new double *;

Поясните разницу - C++
Добрый день уважаемые товарищи программисты. Читаю книгу по С++ в надежде изучить его на начальных этапах и нашёл пункт, где описываются...

поясните действия - C++
for(int i=1; i&lt;x; i++) if(i%2==0) y+=mas; else y-=mas; собственно что обозначает y+= и y-=mas s=&amp;mas; ...

Поясните новичку! - C++
Задано 6-значное число. Определить, кратно ли это число 9, используя признак делимости на 9 (число делится на 9, если сумма его цифр...

Поясните считывание - C++
/*Считывание первой матрицы*/ //создание матрицы float**firstMatrix = new float*; //считывание матрицы const char separator...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
07.09.2012, 12:49 #2
l2ded, int main(int argc,char*argv[])
argc -колличество агрументов(вместе с именем программы) второе, это указатель на массив агрументов
Andsteadur
153 / 137 / 3
Регистрация: 23.05.2009
Сообщений: 275
07.09.2012, 12:50 #3
У меня приведенный код нормально работает
l2ded
80 / 68 / 11
Регистрация: 10.05.2011
Сообщений: 284
07.09.2012, 13:11  [ТС] #4
Цитата Сообщение от Andsteadur Посмотреть сообщение
У меня приведенный код нормально работает
вот скрин
Миниатюры
Поясните детский пример  
l2ded
80 / 68 / 11
Регистрация: 10.05.2011
Сообщений: 284
07.09.2012, 13:14  [ТС] #5
Цитата Сообщение от Invader_Zim Посмотреть сообщение
l2ded, int main(int argc,char*argv[])
argc -колличество агрументов(вместе с именем программы)
каким именем? argc = 1, всегда.

Цитата Сообщение от Invader_Zim Посмотреть сообщение
l2ded, int main(int argc,char*argv[])
второе, это указатель на массив агрументов
Вижу, что указатель, но на какой массив, что к чему не пойму.

Наверное я слишком груп, но я не могу понять.
gitarillo
719 / 519 / 24
Регистрация: 17.06.2010
Сообщений: 1,012
Записей в блоге: 1
07.09.2012, 13:18 #6
argv - это указатель на массив символьных указателей. Каждый указатель в массиве ссылается на строку, содержащую аргумент командной строки.
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
07.09.2012, 13:24 #7
Цитата Сообщение от l2ded Посмотреть сообщение
каким именем? argc = 1, всегда.
значит, ты запускаешь ее без аргументов, в то же время пытаешься конвертировать второй элемент массива (которого нет) в число.

если ты запустишь так:
d:>Programma.exe
argc будет 1, и единственным элементом массива будет указатель на строку "Rrogramma.exe"
если так:
d:>Programma.exe argument0
argc будет 2, и элементами массива будут указатели на строки "Rrogramma.exe" и "argument0"
l2ded
80 / 68 / 11
Регистрация: 10.05.2011
Сообщений: 284
07.09.2012, 13:37  [ТС] #8
Цитата Сообщение от novi4ok Посмотреть сообщение
значит, ты запускаешь ее без аргументов, в то же время пытаешься конвертировать второй элемент массива (которого нет) в число.

если ты запустишь так:

argc будет 1, и единственным элементом массива будет указатель на строку "Rrogramma.exe"
если так:

argc будет 2, и элементами массива будут указатели на строки "Rrogramma.exe" и "argument0"
А епт, я забыл, вот идиот.
в Cи массив начинается с 0.
senk.
l2ded
80 / 68 / 11
Регистрация: 10.05.2011
Сообщений: 284
10.09.2012, 11:59  [ТС] #9
Правильно ли я сделал, просто мне кажется, что это какой-то бред.
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
#include "stdafx.h"
 
#include <iostream>
#include <cstdlib>
using namespace std;
 
void printBinary(const unsigned char val) {
    for(int i =7; i>=0; i--)
    if(val &(1<<i))
        std::cout<<"1";
    else
        std::cout<<"0";
    }
 
 
int main()
{   
    
    float f=134;
    unsigned char*cp =reinterpret_cast<unsigned char*>(&f);
    cout<<&cp<<endl;
    for (int i=sizeof(float); i>=0; i--) {
    printBinary(cp[i]);
    }
    
    system("pause");
    return 0;
}
Миниатюры
Поясните детский пример  
l2ded
80 / 68 / 11
Регистрация: 10.05.2011
Сообщений: 284
10.09.2012, 22:16  [ТС] #10
Цитата Сообщение от l2ded Посмотреть сообщение
Правильно ли я сделал, просто мне кажется, что это какой-то бред.
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
#include "stdafx.h"
 
#include <iostream>
#include <cstdlib>
using namespace std;
 
void printBinary(const unsigned char val) {
    for(int i =7; i>=0; i--)
    if(val &(1<<i))
        std::cout<<"1";
    else
        std::cout<<"0";
    }
 
 
int main()
{   
    
    float f=134;
    unsigned char*cp =reinterpret_cast<unsigned char*>(&f);
    cout<<&cp<<endl;
    for (int i=sizeof(float); i>=0; i--) {
    printBinary(cp[i]);
    }
    
    system("pause");
    return 0;
}
Правильно?
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
11.09.2012, 14:31 #11
Одна тема, один вопрос, посты дублировать нет смысла.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2012, 14:31
Привет! Вот еще темы с ответами:

Поясните по указателям - C++
Добрый день товарищи. У меня вопрос: #include &lt;iostream&gt; using namespace std; int main() {

Поясните по сериализации - C++
В boost::serialization Нужно слить мап в файл. Простите за тупой вопрос, но нужно прописывать сериализацию для каждого класса...

поясните по #define - C++
У меня есть super class Animals и два подкласса Cats и Birds крайне похожие в реализации. Так вот хочу сделать так: в файле &quot;Birds.h&quot;...

Поясните на пальцах) - C++
Зачем выделять память под массив?И зачем ставить 2 звездочки перед переменной?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.09.2012, 14:31
Ответ Создать тему
Опции темы

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