Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: mitetacol
Дата сообщения: 14.07.2008 15:33
объявляем структуру
struct qwe{
    unsigned short    q1;
    unsigned long    q2;
    unsigned short    q3;
    unsigned short    q4;
    unsigned long    q5;
};
дальше вызываю
int c=sizeof(qwe);
Как вы думаете какой результат? Правильно 16 байт))
Автор: paparazzo
Дата сообщения: 14.07.2008 16:02
Поддерживает ли Visual Studio 2008 генерацию кода для процессоров с поддержкой SSE4 или SSSE3??
Автор: mitetacol
Дата сообщения: 14.07.2008 16:02
Разобрался. Происходит выравнивание по большему типу.
Автор: akaGM
Дата сообщения: 14.07.2008 16:08
mitetacol
20 байт...

/Zp

или, в случае VC:

default -- 16 байт
pack(1) --14 байт
pack(2) --14 байт
pack(4) --16 байт

Автор: Aleksoid1978
Дата сообщения: 15.07.2008 03:39
Народ - подскажите. Есть такая задача - программа написанная на Visual Studio 2008/2005, MFC - хочется сделать так чтобы по нажатию комбинации Win+M(минимизировать все окна) окно программы не пряталось(как например сделано в QIP - окно контаков).
Автор: zorgman
Дата сообщения: 22.07.2008 13:00
Вопрос, настроечного характера. Есть Borland C++ 5.02. Где и что подкрутить, что б он в консоле правиль отображал русский шрифт?
Автор: akaGM
Дата сообщения: 22.07.2008 13:12
zorgman
вин- или дос-приложение?
ну и поиграй с этой кодировкой 866/1251 в printf():

printf("їхыыю тюЁыф!")
printf("хелло ворлд!")
Автор: zorgman
Дата сообщения: 22.07.2008 13:32
akaGM приложение дос. Щя попробуем.


Добавлено:
Не невыходит
Автор: Skipper
Дата сообщения: 22.07.2008 16:25
попробуй это


Код:
char* Decode_Win_to_DOS(char * str)
{
unsigned char *cstr=str;
for(;*cstr;cstr++)
{
if(*cstr>=240)
*cstr-=16;
else if(*cstr>=192)
*cstr-=64;
else if(*cstr==185)
*cstr=252;
}
return str;
}
Автор: akaGM
Дата сообщения: 22.07.2008 16:33
zorgman
фигня...
у тебя винда небось русская и криво настроена...
у меня на родной всё работает, и из-под cmd и под Фаром

вот код и екзюк
1.exe 1.c
компилировано свободным bcc 5.5...

надеюсь, ты сам текст программы в CP866 перевёл?
Автор: zorgman
Дата сообщения: 22.07.2008 16:48
Сорри, я наверное не так выразился, проблема не в том что у меня дос не воспринимает русский, со всеми програми всё ок, просто я интересовался как заставить Borland C++ 5.02 кодировку русскую воспринимать.

Обьясню в чём шутка, я создаю текст программы в BC++, компилю, запускаю, каракули.
Захожу в фар, открываю текст программы, копирую, вставляю типа в другой кодировке, сохраняю, захожу обратно в BC++, открываю этот файл и вижу вместо киррилицы лабуду, компилю, и вуаля в консоле всё нормально. Вот и вапрос каг это поправить что б и в BC++ нормально отображалось и готовая прога нормально отображала шрифты.
Автор: akaGM
Дата сообщения: 22.07.2008 16:50
для среды ВС -- никак
Автор: zorgman
Дата сообщения: 22.07.2008 16:51
мне не охота самому переводить с правильную кодировку, вот я и спрашиваю можно ли это сделать на уровне самого BC++ 5.02.
Автор: xdude
Дата сообщения: 22.07.2008 17:19
zorgman
попробуй в консоли перед запуском своей программы набрать команду

Код:
chcp 866
Автор: Aleksoid1978
Дата сообщения: 23.07.2008 01:24
Skipper

Цитата:
Aleksoid1978, форму сделай поверх всех, и пошли системе Win+M - твоя форма будет на месте.


Не будет - тоже скрывается ...
Автор: Sumato
Дата сообщения: 23.07.2008 17:28
Aleksoid1978

Цитата:
...сделать так чтобы по нажатию комбинации Win+M(минимизировать все окна) окно программы не пряталось

Есть ещё коварное сочетание Win+D: намучился с ним. Короче, нечто подобное приходилось делать на WinAPI. Могу подбросить идею или простейший код (на API ессно). Только давайте перейдём в более подходящую ветку: Visual C++.
P.S. А ещё лучше, если продублируете свой вопрос на rsdn: там ещё должны быть живы MFC-мастодонты.
Автор: Aleksoid1978
Дата сообщения: 24.07.2008 04:01
Sumato

Задал вопрос в ветке Visual C++ ... ; жду помощи
Автор: 4aineG
Дата сообщения: 31.07.2008 13:53
помогите пожалуйста мне разобраться в моих ошибках. выскакивает одна ошибка "память не может быть written". задание: подсчитать количество слов в предложении.
#pragma once
#include <string.h>
#include <stdio.h>
class Line
{
private:

    char *Line1;

public:
    char* strcpy(char *Line1, char *L1)
{
    int i=0;
    while (Line1[i]!='\0')
    {
        L1[i]=Line1[i];
        i++;
    }
    L1[i] = '\0';
    return L1;
}

    Line(char *L1)
    {
        Line1 = new char[50];
        strcpy(Line1, L1);
    }

    int CountWordsInLine()
    {
        int i;
        int Count;
        while(Line1[i]!='/0')
            if (Line1[i]=' ')
                Count++;
        Count++;
        return Count;
    }

    void Print()
    {
        int temp = CountWordsInLine();
        printf ("%d", temp);
    }

    ~Line()
    {
        delete [] Line1;
    }

};

#pragma once
#include "List.h"
int main()
{
    Line ln("Hello Russia");
    
    ln.CountWordsInLine();
    ln.Print();
}
Автор: c0d3r
Дата сообщения: 31.07.2008 17:00
4aineG

Ошибок очень много. Позвольте порекомендовать вам использовать std::string, чтобы хотя бы уменьшить количество ошибок.


Цитата:
char* strcpy(char *Line1, char *L1)
{
int i=0;
while (Line1[ i ]!='\0')
{
L1[ i ]=Line1[ i ];
i++;
}
L1[ i ] = '\0';
return L1;
}


Зачем писАть свой strcpy() если он уже есть в стандартной сишной библиотеке? Тот конечно позволяет сделать buffer overflow, но хотя бы не падает, как ваш.

Тут ошибка в том, что вы пытаетесь строке L1 присваивать. В то время как присваивать нужно Line1.

Предлагаю переписать (а лучше её вообще выкинуть) эту горе ф-цию так:


Код:
int i = 0;
while (L1[ i ] != '\0') {
Line1[ i ] = L1[ i ];
i++;
}
Line1[ i ] = '\0';

return Line1;
Автор: BornLeader
Дата сообщения: 31.07.2008 17:11
Обсолютно согласен с c0d3r. Не надо изобретать велосипед если уже существует
STL надежный и проверенный.
Автор: 4aineG
Дата сообщения: 01.08.2008 17:03
c0d3rпокорнейше благодарю!


Добавлено:
у меня опять проблема... ошибок вроде как не показывает, но в то же время ничего не происходит, а должен распечатать количество слов... я вас наверно уже достал этим ерундовым заданием..
#pragma once
#include <string.h>
#include <stdio.h>
class Line
{
private:

    char *Line1;

public:
    int strlen(char *L1)
{
    int i=0;
    while (L1[i]!='\0')
    i++;
    return i;
}
    char* strcpy(char *Line1, char *L1)
{
    int i=0;
    while (L1[i]!='\0')
    {
        Line1[i]=L1[i];
        i++;
    }
    Line1[i] = '\0';
    return Line1;
}

    Line(char *L1)
    {
        Line1 = new char[strlen(L1)];
        strcpy(Line1, L1);
    }

    int CountWordsInLine()
    {
        int i=0;
        int Count=0;
        while(Line1[i]!='\0')
            if (Line1[i]==' ')
                Count++;
        Count++;
        return Count;
    }

    void Print()
    {
        int temp = CountWordsInLine();
        printf ("%d", temp);
    }

    ~Line()
    {
        delete [] Line1;
    }

};


#pragma once
#include "class.h"
int main()
{
    Line ln("Hello Russia");
    ln.CountWordsInLine();
    ln.Print();
}
Автор: c0d3r
Дата сообщения: 01.08.2008 20:05
4aineG


Цитата:
ошибок вроде как не показывает, но в то же время ничего не происходит


Вообще-то происходит -- программа впадает в вечный цикл.


Цитата:
я вас наверно уже достал этим ерундовым заданием..


Да собственно всегда рад помочь и поискать ошибки в чужом коде. Главное, чтобы вам это помогло и пригодилось, чтобы вы научились.

P.S. В данном случае ошибка простая, я не буду вам на неё явно указывать -- просто сравните ф-цию CountWordsInLine() в своём варианте, и в моём -- сами увидите.
Автор: 4aineG
Дата сообщения: 02.08.2008 11:25
c0d3r
еще вопрос... а как распечатать строку?
Автор: c0d3r
Дата сообщения: 02.08.2008 11:29
4aineG


Цитата:
еще вопрос... а как распечатать строку?


Это шутка?

В любом случае вопрос нужно уточнить? Во-первых, в каком языке? С или С++? Во-вторых, куда? На stdout, или stderr, или в файл?

Вот примеры:


Код:
/* чистый Си */
printf("Строка\n");
fprintf(stderr, "Строка\n");

// C++
cout << "Строка" << endl;
cerr << "Строка" << endl;
Автор: 4aineG
Дата сообщения: 02.08.2008 12:35
c0d3r
не корректно сформулировал... в моем случае Line1 на экран при помощи printf, а не cout просто я iostream не подключал
Автор: 4aineG
Дата сообщения: 03.08.2008 16:17
c0d3r
я решил добавить функцию переворота строки в свой код, но почему то выскакивает ошибка
void RevertLine()
    {
        for (int i=0; i<strlen(L1); i++) //ошибка L1 undeclared
             for (int j=strlen(L1); j<0; j--) identifier
        {
            char temp = Line1[j]; // и могу ли я вообще таким образом поменять буквы
            Line1[j] = Line1[i]; местами
            Line1[i] = temp;
        }
        int i=0;
        while(Line1[i]!='\0')
        {
            printf("%c", Line1[i]);
            i++;
        }
    }


Добавлено:
c0d3r
и еще вопрос ... что означает переопределение операции сравнения строк?
Автор: c0d3r
Дата сообщения: 03.08.2008 16:51
4aineG


Код: void RevertLine()
Автор: 4aineG
Дата сообщения: 03.08.2008 17:14
c0d3r

Цитата:
char temp = Line1[ j ]; // и могу ли я вообще таким образом поменять буквы
Line1[ j ] = Line1[ i ]; местами
Line1[ i ] = temp;


Цитата:
Откуда взялась Line1? Опять же не объявлена.

???но ведь в предыдущей функции CountWordsInLine() я тоже не объявлял Line1...
и на счет L1: я же в конструкторе уже писал. это получается мне в мейне постоянно указывать одно и тоже предложение в качестве аргумента функции???


Автор: c0d3r
Дата сообщения: 03.08.2008 17:18
4aineG


Цитата:
???но ведь в предыдущей функции CountWordsInLine() я тоже не объявлял Line1...


Потому что Line1 является приватным членом класса и доступна всем его методам.


Цитата:
и на счет L1: я же в конструкторе уже писал.


В данном случае, вам возможно не нужна переменная L1. Используйте Line1.

И вообще. Почитайте про области видимости переменных. И называйте переменные более осмысленно, а не L1/Line1.
Автор: 4aineG
Дата сообщения: 03.08.2008 17:28
c0d3r
спасибо вы конечно извините что у меня вопросы как у ... но думаю скоро научусь и велосипед поедет

Добавлено:
c0d3r
получается L1 вообще выкинуть и использовать Line1? а в аргументе конструктора мне что ставить?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.