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

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

Автор: blaro
Дата сообщения: 01.04.2008 16:59
Люди помогите! Есть строчка

Код: sum=sum+(*pa);
printf("The sum is %d\n", sum);
Автор: distance
Дата сообщения: 01.04.2008 18:45
blaro

Цитата:
Почему прога возвращает ноль? В чем проблема?

это надо спрашивать не здесь, а на http://bash.org.ru
Автор: scai
Дата сообщения: 01.04.2008 22:58
помогите с екселем....
Автор: blaro
Дата сообщения: 02.04.2008 00:16
distance
Ты поц или что? Не хочешь помочь, так не лезь. Тоже мне, сын Била Гейтса...
Автор: TeXpert
Дата сообщения: 02.04.2008 07:51
blaro
Цитата:
sum=sum+(*pa);
printf("The sum is %d\n", sum);

Почему прога возвращает ноль? В чем проблема?
А ты вот ответь на ещё более простой вопрос: почему
Код: a + b = 30?
Автор: marrow1
Дата сообщения: 03.04.2008 00:38
Всем доброго времени суток! У меня в Visual C++ 2005 есть на диалоговом окне контрол типа IP Address controll. Он используеться для введения значения IP адреса или маски. Контрол дает переменную типа DWORD. Для тех кто не знает, то скажу, что адрес сети - 4 числа по одному байту (т.е. получаеться 32 бита), каждое разделено точкой, и значение каждого байта возможно от 0 до 255. Как мне из переменной, т.е. из данного контрола вытянуть отдельнозначения каждого из 4-х байтов, в 10-тичном коде. Очень нужно, а я не очень уж программер. Помогите пожалуйста.
Автор: alexsoftdev
Дата сообщения: 03.04.2008 01:00
marrow1:


Цитата:
Как мне из переменной, т.е. из данного контрола вытянуть отдельнозначения каждого из 4-х байтов, в 10-тичном коде.



Вот собственно код:


Цитата:

DWORD ip = .... // Тут вытаскивается значение из контрола
BYTE * pBytes = (BYTE*)&ip; // Это мы делаем "хитрый" кастинг нашего DWORD-а
//Далее просто
pBytes[0] - первое число
pBytes[1] - второе число
pBytes[2] - третье число
pBytes[3] - четвертое число

Примечание - порядок байт совсем необязательно такой, вполне возможно как раз наоботор - от 4-го к первому. Но думаю это после первого запуска отладить можно.

Удачи
Автор: Unsacrificed00
Дата сообщения: 03.04.2008 06:16
Пытаюсь прочитать файл 2 раза подряд, после первого прохода перемещаюсь на начало, но перемещение не срабатывает

Код:
ifile.open(ifilename, ios::in | ios::binary);
char t[2];
while(ifile.read(t,2))
{
    cout<<"-";
    ofile << t[1];
}
ifile.seekg(0,ios::beg);
while(ifile.read(t,2))
{
    cout<<"+";
    ofile << t[0];
}
Автор: Lyrik
Дата сообщения: 03.04.2008 10:23
Unsacrificed00
ошибка в том, что seekg не будет выполнять позиционирование, поскольку ты дошел чтением до конца файла и установил соответсвующие биты статусов потока. сбрось их и тогда позиционирование будет выполняться корректно.

Цитата:
ifile.open(ifilename, ios::in | ios::binary);
char t[2];
while(ifile.read(t,2))
{
cout<<"-";
ofile << t[1];
}
ifile.clear();
ifile.seekg(0,ios::beg);
while(ifile.read(t,2))
{
cout<<"+";
ofile << t[0];
}
Автор: marrow1
Дата сообщения: 03.04.2008 10:43
alexsoftdev
Спасибо. Буду пробовать.
Автор: Unsacrificed00
Дата сообщения: 04.04.2008 05:42
Lyrik, благодарю, работает (а ведь после seekg и пробовал clear, а перед - не догадался)
Автор: marrow1
Дата сообщения: 04.04.2008 15:28
спасибо. разобрался. теперь проблема состоит в селдюющем. Подщет и сохранени данных я сделал, ух записывает построчно в текстовый файл. В данный момент нахожусь в диалоговом окне (NETDlg.cpp), после подщета мне нужно вывести содерщимое файла в другое диалоговое окно (NETDlg1.cpp), контрол Edit1 на нем.
файл читаю вот таким методом


Код:
FILE *stream;
char line[100];

if( fopen_s( &stream, "netcalc.txt", "r" ) == 0 )
{
if( fgets( line, 100, stream ) == NULL)
printf( "fgets error\n" );
else
printf( "%s", line);
fclose( stream );
}
Автор: scai
Дата сообщения: 05.04.2008 10:08
А зачем страдать сишными функциями если есть класы МФС CFile , CStdioFile и функции Write /WriteString и Read/ReadString - намного удобнее помойму

Добавлено:
CStdioFile file;
file.Open("D:\\text.txt",CFile::modeRead);
while(file.ReadString(ReadString))
{
        StringCount++;
        Text+=ReadString;
}
Автор: marrow1
Дата сообщения: 05.04.2008 13:41
scai

спасибо. А вы не могли бы поподробнее написать как сделать мне то что мне нужно? или пример рабочий привести. А то я не сильно в этом разбираюсь, а очень уж надо.
Автор: marrow1
Дата сообщения: 05.04.2008 16:35
сдалал вот так:

CStdioFile file;
file.Open((LPCTSTR)("netcalc.txt"),CFile::modeRead);
CString tmp, Text;
while(file.ReadString(tmp))
{
    Text+=tmp;
}

так компилируеться, но когда в запущенной программе вызываю соответствующее действие, то выбивает ошибку

Program: C:\NET\debug\NET.exe
File: f:\rtm\vctools\crt_bld\self_x86\crt\src\fgets.c
Line: 57

Expression: (str != NULL)

как с этим бороться и что сделать?
Автор: scai
Дата сообщения: 05.04.2008 19:01
попробуйте tmp=""; и Text=""; тоесть присвоить пустую строку
Автор: marrow1
Дата сообщения: 05.04.2008 19:23
scai

Цитата:
попробуйте tmp=""; и Text=""; тоесть присвоить пустую строку


попробовал, не помогло. Еще варианты есть? Помогите пожалуйста, очень нужно.
Автор: scai
Дата сообщения: 05.04.2008 21:51

Цитата:
Program: C:\NET\debug\NET.exe
File: f:\rtm\vctools\crt_bld\self_x86\crt\src\fgets.c
Line: 57

Expression: (str != NULL)
:
вообщкто выбивает на функции fgets... нужно весь код смотреть
Автор: marrow1
Дата сообщения: 05.04.2008 22:02
scai

понимаю, но я не использую функцию fgets. Пробовал был раньше, но уже удалил. Ребилдил полностью проект по новой. поиском давал по всему проэкту также, fgets нигде нету. Тем более что компилирует программу нормально. Что же делать? Плиз.
Автор: susuman
Дата сообщения: 05.04.2008 23:07


Цитата:
scai

понимаю, но я не использую функцию fgets. Пробовал был раньше, но уже удалил. Ребилдил полностью проект по новой. поиском давал по всему проэкту также, fgets нигде нету. Тем более что компилирует программу нормально. Что же делать? Плиз.


Во первых заверни имя файла в CString:
file.Open(CString("netcalc.txt"),CFile::modeRead);
LPCTSTR в данном случае не работает.
Потом, надо проверить что возращает file.Open(...)
Как в мсдн:
if( !f1.Open( pFileName, CFile::modeCreate
| CFile::modeWrite | CFile::typeText ) ) {
#ifdef _DEBUG
afxDump << "Unable to open file" << "\n";
#endif
exit( 1 );
}
Автор: mastaflow
Дата сообщения: 05.04.2008 23:28
Доброго времени суток всем
такой вопрос - буду писать змейку на MS VС++
проблема в том, что препод сказал, чтобы не использовали классы и объекты..
в борландс3.1 была и есть функция delay (в dos.h) - у нее есть аналог в студии и какой?
соответственно нужно это для примерно такой реализации:
while(1) {
    if(key = getch()) {
        changeDirection(key);
    }
    delay(200);
}
Автор: susuman
Дата сообщения: 05.04.2008 23:32
ещё добавлю:
Эта ошибка в fgets (которая используестя в ReadString() )
Возникает потому, что в неё передается FILE* str который NULL
в случае любой ошибки при открытии файла ( не найден и т.п.)
Автор: marrow1
Дата сообщения: 06.04.2008 00:38
susuman

Цитата:
Во первых заверни имя файла в CString:
file.Open(CString("netcalc.txt"),CFile::modeRead);
LPCTSTR в данном случае не работает.


Спасибо. Уже идет без ошибки. А теперь как же мне вывести содердимое файла пользователю? Помогите плиз. Я этого добиваюсь от начала.
Автор: marrow1
Дата сообщения: 06.04.2008 03:02
Считываю файл что мне нужно и размещаю в контрол Edit вот так:

CString strBuffer;
char line[50];

        FILE *ff = fopen("netcalc.txt", "r");
        while (!feof(ff)){
            fgets( line, 50, ff );
        line[strlen(line)-1]=0;
        strBuffer+=line;
        }
        
        ed_4.SetWindowTextW(strBuffer);
        fclose(ff);

только мне нужно чтобы каждая строка в Edit отображалась также отдельно как и в текстовом файле с которого я считываю. Как это сделать?
Автор: susuman
Дата сообщения: 06.04.2008 05:20
marrow1

Цитата:
только мне нужно чтобы каждая строка в Edit отображалась также отдельно как и в текстовом файле с которого я считываю. Как это сделать?


Override функцию OnInitDialog (Class View, Properties, Override)
все вместе будет так:
BOOL EditDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    // TODO: Add extra initialization here
    CStdioFile file;
    CString txt;
    if(file.Open(CString("netcalc.txt"),CFile::modeRead))
    {
        CString chank;
        while(file.ReadString(chank))
        {
            txt += chank;
            txt += '\r';
            txt += '\n';
        }
    }
    m_Edit3.SetWindowText(txt);
    return TRUE; // return TRUE unless you set the focus to a control
    // EXCEPTION: OCX Property Pages should return FALSE
}

Этот Edit контрол должен иметь свойства Multiline и Vertical Scroll = true.
Да это было в МФСи, но принцип тот же.
Кстатиб если можно использовать дот-нет, то там всё проще.
M$ даже включил туда ReadLinesFromFile - типа мы не хуже юникса с его readlines



Добавлено:

mastaflow:

Цитата:
в борландс3.1 была и есть функция delay (в dos.h) - у нее есть аналог в студии и какой?
соответственно нужно это для примерно такой реализации:

в MS VC++ это Sleep:

The Sleep function suspends the execution of the current thread for at least the specified interval.
VOID Sleep(
DWORD dwMilliseconds
);
--
Автор: scai
Дата сообщения: 06.04.2008 10:55
marrow1

А какая задача программы то?
Автор: marrow1
Дата сообщения: 06.04.2008 13:22
scai
Программа разбивает заданнау компьютерную сеть на подсети (либо по количеству подсетей, либо по количеству компьютеров в подсети), это раз. А потом еще надо будет сгенерировать конфигурационные файлы маршрутизаторов с этими подсетями.
Автор: scai
Дата сообщения: 06.04.2008 18:27
О_о .. самому интресно на пргу взгянуть...
Автор: chintoi
Дата сообщения: 07.04.2008 19:18
Пожалуйста, помогите. Задача написать поиск в базе словаря. Пока все на ранней стадии, но я запоролся на считывании из файла, дальше сам справлюсь.

Проблема: для считывания использую fgets и fscanf, и на них программа произвольно вылетает

база выглядит так:

index0.txt
a
<int адрес_на_список_слов_на_а_в_INDEX1>
b
<int адрес_на_список_слов_на_b_в_INDEX1>
...


index1.txt
apple
<int адрес_перевода_apple_в_DATA>
<int байт_перевода_apple_в_DATA>
melon
<int адрес_перевода_melon_в_DATA>
<int байт_перевода_melon_в_DATA>
...


код:
void main()
{
long int pointer0, pointer1,entrysize;

char *word, *match0, *match1, *entry, *tempstr;

FILE *index0, *index1, *data;

word="test";



index0 = fopen("index0.txt", "r");
while(!feof(index0)) //для начала найти хоть совпадение первого символа в index0
    {
    fgets(match0,50,index0);
    if(word[0]==match0[0]){cout<<"OK!!";break;}
    }
fscanf(index0,"%d",&pointer0); //считываем, байтовый адрес в index0, начиная с которого слова начинаются на нужную букву
fclose(index0);



index1 = fopen("index1.txt", "r");
fseek(index1, pointer0,SEEK_SET); //выходим на этот адрес
fgets(match1,79,index1); //считываем первое слово на заданную букву
fscanf(index1,"%d",&pointer1); //считываем, байтовый адрес в data, где начинается перевод
fscanf(index1,"%d",&entrysize); //считываем, длину перевода
fclose(index1);


//собственно, дальше дело не заходило

// data = fopen("data.txt", "r");
// fclose(data);


printf("%s %d",match0,pointer0);
printf("\n%s %d",match1,pointer1);
getch();
}


Хотелось бы узнать в чем моя ошибка или узнать про альтернативыне функции
Автор: akaGM
Дата сообщения: 07.04.2008 19:30
chintoi

Код: char *word, *match0, *match1, *entry, *tempstr;

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

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


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