IPB

Здравствуйте, гость ( Вход | Регистрация )

7 страниц V  « < 4 5 6 7 >  
Reply to this topicStart new topic
> C/C++, Для новичков
Эроласт
сообщение 10 Oct 2016, 11:17
Сообщение #101

Зануда
Сообщений: 2 237
Спасибо сказали: 2899 раз




Какой же лютый трындец. Неужели нельзя взять уже готовую высокоуровневую обертку? Не поверю, что для си++ нет такой.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 10 Oct 2016, 15:16 (Сообщение отредактировал t800 - 10 Oct 2016, 19:26)
Сообщение #102

Разработчик
Сообщений: 534
Спасибо сказали: 222 раза




Цитата(Эроласт @ 10 Oct 2016, 14:17) *
Какой же лютый трындец. Неужели нельзя взять уже готовую высокоуровневую обертку? Не поверю, что для си++ нет такой.


Ну я нагуглил исходники программы которая может посылать e-mail и умеет работать с SDL_net
называется она SDLmail правда она только текст умеет посылать (как и curl) то есть для атачмента
надо еще base64 делать, вот он эта программа:



--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
FBX
сообщение 11 Oct 2016, 03:45 (Сообщение отредактировал FBX - 11 Oct 2016, 04:10)
Сообщение #103

🐓🐓🐓🐓🐓🐓🐓
Сообщений: 1 845
Спасибо сказали: 1570 раз




Цитата
Код
using namespace std;

Ну сколько можно…


--------------------
using namespace fbx;
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 11 Oct 2016, 07:25 (Сообщение отредактировал t800 - 11 Oct 2016, 07:40)
Сообщение #104

Разработчик
Сообщений: 534
Спасибо сказали: 222 раза




Цитата(FBX @ 11 Oct 2016, 06:45) *
Цитата
Код
using namespace std;

Ну сколько можно…


Ну я счас для интереса попробовал изменить на

Код
using namespace fbx;


g++ сильно заругался.
Код
danya@danya:~/hello$ g++ server.cc -w -lSDL_net -o server
server.cc:9:17: ошибка: «fbx» is not a namespace-name
server.cc:9:20: ошибка: expected namespace-name before «;» token
server.cc:17:7: ошибка: «string» не является именем типа
server.cc:18:7: ошибка: «string» не является именем типа
server.cc: В функции «int main(int, char**)»:
server.cc:37:9: ошибка: нет декларации «cout» в этой области видимости
server.cc:37:9: замечание: suggested alternative:
/usr/include/c++/4.6/iostream:62:18: замечание:   «std::cout»
server.cc:37:73: ошибка: нет декларации «endl» в этой области видимости
server.cc:37:73: замечание: suggested alternative:
/usr/include/c++/4.6/ostream:543:5: замечание:   «std::endl»
server.cc:45:9: ошибка: нет декларации «cout» в этой области видимости
server.cc:45:9: замечание: suggested alternative:
/usr/include/c++/4.6/iostream:62:18: замечание:   «std::cout»
server.cc:50:9: ошибка: нет декларации «cout» в этой области видимости
server.cc:50:9: замечание: suggested alternative:
/usr/include/c++/4.6/iostream:62:18: замечание:   «std::cout»
server.cc:50:143: ошибка: нет декларации «endl» в этой области видимости
server.cc:50:143: замечание: suggested alternative:
/usr/include/c++/4.6/ostream:543:5: замечание:   «std::endl»
server.cc:66:9: ошибка: нет декларации «cout» в этой области видимости
server.cc:66:9: замечание: suggested alternative:
/usr/include/c++/4.6/iostream:62:18: замечание:   «std::cout»
server.cc:66:79: ошибка: нет декларации «endl» в этой области видимости
server.cc:66:79: замечание: suggested alternative:
/usr/include/c++/4.6/ostream:543:5: замечание:   «std::endl»
server.cc:74:9: ошибка: нет декларации «cout» в этой области видимости
server.cc:74:9: замечание: suggested alternative:
/usr/include/c++/4.6/iostream:62:18: замечание:   «std::cout»
server.cc:75:62: ошибка: нет декларации «endl» в этой области видимости
server.cc:75:62: замечание: suggested alternative:
/usr/include/c++/4.6/ostream:543:5: замечание:   «std::endl»
server.cc:83:9: ошибка: нет декларации «cout» в этой области видимости
server.cc:66:9: замечание: suggested alternative:
/usr/include/c++/4.6/iostream:62:18: замечание:   «std::cout»
server.cc:66:79: ошибка: нет декларации «endl» в этой области видимости
server.cc:66:79: замечание: suggested alternative:
/usr/include/c++/4.6/ostream:543:5: замечание:   «std::endl»
server.cc:74:9: ошибка: нет декларации «cout» в этой области видимости
server.cc:74:9: замечание: suggested alternative:
/usr/include/c++/4.6/iostream:62:18: замечание:   «std::cout»
server.cc:75:62: ошибка: нет декларации «endl» в этой области видимости
server.cc:75:62: замечание: suggested alternative:
/usr/include/c++/4.6/ostream:543:5: замечание:   «std::endl»
server.cc:83:9: ошибка: нет декларации «cout» в этой области видимости
server.cc:83:9: замечание: suggested alternative:
/usr/include/c++/4.6/iostream:62:18: замечание:   «std::cout»
server.cc:88:9: ошибка: нет декларации «cout» в этой области видимости
server.cc:88:9: замечание: suggested alternative:
/usr/include/c++/4.6/iostream:62:18: замечание:   «std::cout»
server.cc:88:57: ошибка: нет декларации «endl» в этой области видимости
server.cc:88:57: замечание: suggested alternative:
/usr/include/c++/4.6/ostream:543:5: замечание:   «std::endl»
server.cc:94:5: ошибка: нет декларации «cout» в этой области видимости
server.cc:94:5: замечание: suggested alternative:
/usr/include/c++/4.6/iostream:62:18: замечание:   «std::cout»
server.cc:94:38: ошибка: нет декларации «endl» в этой области видимости
server.cc:94:38: замечание: suggested alternative:
/usr/include/c++/4.6/ostream:543:5: замечание:   «std::endl»
server.cc:143:33: ошибка: нет декларации «SERVER_NOT_FULL» в этой области видимости
server.cc:157:33: ошибка: нет декларации «SERVER_FULL» в этой области видимости


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
Эроласт
сообщение 11 Oct 2016, 14:36 (Сообщение отредактировал Эроласт - 11 Oct 2016, 14:39)
Сообщение #105

Зануда
Сообщений: 2 237
Спасибо сказали: 2899 раз





Вот к чему приводит бездумное копирование кода из гугла в блокнот. Чувак даже не знает, что значит та или иная строка. А ещё уроки пишет.
Хорошо хоть не по майнкрафту.
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 11 Oct 2016, 15:07 (Сообщение отредактировал t800 - 11 Oct 2016, 15:10)
Сообщение #106

Разработчик
Сообщений: 534
Спасибо сказали: 222 раза




Цитата(Эроласт @ 11 Oct 2016, 17:36) *

Вот к чему приводит бездумное копирование кода из гугла в блокнот. Чувак даже не знает, что значит та или иная строка. А ещё уроки пишет.
Хорошо хоть не по майнкрафту.


Почему бездумное? Я же копирую не любой код а который нахожу по нужным мне запросам. Например мне нужно оправить e-mail и я гугулю запрос "код C++ SDL_net отправить e-mail " а про строку что она значит по моему самый простой способ понять что она делает это вставить ее в программу и посмотреть что она делает. Вот я вставил строчку

Код
using namespace fbx;


И увидел что она делает. Она делает ошибки. Значит это строчка не правильная! А правильная строчка вот такая:

Код
using namespace std;


Потому что с ней программа работает.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 11 Oct 2016, 22:18 (Сообщение отредактировал AlexSpl - 11 Oct 2016, 22:19)
Сообщение #107

Immortal
Сообщений: 798
Спасибо сказали: 555 раз




Цитата
И увидел что она делает. Она делает ошибки.

Если в коде ошибки, его лучше закомментировать от греха подальше:

Код
// using namespace fbx;


Потом запускаешь программу, которая генерит набор символов заданной длины в лексикографическом порядке (например, "usign namespcae fеr;", "singu spaceamen sdt;" и т.д.) и комментишь неудачные варианты. Спустя конечное время обязательно должен получиться вариант, который скомпилируется.
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 11 Oct 2016, 22:27
Сообщение #108

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20603 раза




Срочно, срочно учебник.
Мне для сишки когда-то очень зашел полуучебник-полусправочник Шилдта (по нему и учился, когда K&R еще советского издания отдал владельцу). Он и для С++ писал - вот его не читал, не знаю, но думаю - тоже вполне годнота для начала.
Герберт Шилдт, "Полный справочник по С++".
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 11 Oct 2016, 22:44
Сообщение #109

Immortal
Сообщений: 798
Спасибо сказали: 555 раз




Как поётся в одной старой песне: "Поймём потом, поймём потом"

https://www.youtube.com/watch?v=2KW3roDj3RI
Go to the top of the pageAdd Nick
 
+Quote Post
tolich
сообщение 12 Oct 2016, 01:21
Сообщение #110

😸🧡✊✌️
Сообщений: 16 457
Спасибо сказали: 3339 раз




Также неплохо попробовать другие варианты:
Код
using deep space nine;
tossing whole place down;
mocking to face a clown;
Вариантов нереально много.


--------------------
Я слежу за тобой!
* tolic.narod.ru

Цитата
Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел.
Борис "Бонус" Репетур, "От винта!", выпуск 38.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 12 Oct 2016, 16:46 (Сообщение отредактировал t800 - 12 Oct 2016, 16:51)
Сообщение #111

Разработчик
Сообщений: 534
Спасибо сказали: 222 раза




Цитата(AlexSpl @ 12 Oct 2016, 01:18) *
Цитата
И увидел что она делает. Она делает ошибки.

Если в коде ошибки, его лучше закомментировать от греха подальше:

Код
// using namespace fbx;



Я так и делаю


Цитата
Потом запускаешь программу, которая генерит набор символов заданной длины в лексикографическом порядке (например, "usign namespcae fеr;", "singu spaceamen sdt;" и т.д.) и комментишь неудачные варианты. Спустя конечное время обязательно должен получиться вариант, который скомпилируется.


А вот это не правильно! Надо просто посмотреть в Google что за ошибка. И вставить тот код который написано что надо вставлять при таких ошибках. И тогда получается намного быстрее.

Кстат вот! Вот код исходника что делает base64 кодирование.

Код
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include "base64.h"
#include <cstring>


int main() {

//    char *FileBuf = NULL;
    FILE* hFile = NULL;
    unsigned long int FileSize,TotalSize;
//    char *SendBuf = NULL;
    unsigned int q, i,res;
        hFile = fopen("input.txt","rb");

        if(hFile == NULL)
          {
              fputs("Ошибка файла \n", stderr);
              exit(1);
              }

// Из примера


  // определяем размер файла
  fseek(hFile , 0 , SEEK_END);                          // устанавливаем позицию в конец файла
  long lSize = ftell(hFile);                            // получаем размер в байтах
  q = lSize/54+1;
  rewind (hFile);                                       // устанавливаем указатель в конец файла

  char * SendBuf = (char*) malloc(sizeof(char) * lSize);
  char * FileBuf = (char*) malloc(sizeof(char) * lSize); // выделить память для хранения содержимого файла
  if (FileBuf  == NULL)
  {
      fputs("Ошибка памяти", stderr);
      exit(2);
  }

/*  size_t result = fread(buffer, 1, lSize, hFile);       // считываем файл в буфер
//    fread(buffer,sizeof(char),54,hFile);
  if (result != lSize)
  {
      fputs("Ошибка чтения", stderr);
      exit (3);
  }

  //содержимое файла теперь находится в буфере
  puts(buffer);

  // завершение работы
  fclose (hFile);
  free (buffer);

// Конец  из примера

          
*/

// Проверяем размер:

// FileSize = 0;
//        while(!feof(hFile))
//            FileSize += fread(FileBuf,sizeof(char),54,hFile);
//        TotalSize += FileSize;
// sending the file:
//        if(TotalSize/1024 > MSG_SIZE_IN_MB*1024)
//            throw ECSmtp(ECSmtp::MSG_TOO_BIG);
//        else
//        {
//            fseek (hFile,0,SEEK_SET);
//            MsgPart = 0;
//            for(i=0;i<FileSize/54+1;i++)
//            {
//        res = fread(FileBuf,sizeof(char),54,hFile);
//
//MsgPart ? strcat(SendBuf,base64_encode(reinterpret_cast<const unsigned char*(FileBuf),res).c_str()):              : //strcpy(SendBuf,base64_encode(reinterpret_cast<const unsigned char*(FileBuf),res).c_str());
//                strcat(SendBuf,"\r\n");
//                MsgPart += res + 2;
//        if(MsgPart >= BUFFER_SIZE/2)
//        {
// sending part of the message
//                    MsgPart = 0;
//                    SendData(); // FileBuf, FileName, fclose(hFile);
//                }
//            }
//            if(MsgPart)
//            {
//                SendData(); // FileBuf, FileName, fclose(hFile);
//            }
// }
//    fclose(hFile);
//    }
//    delete[] FileBuf;
//    delete[] FileName;


        FileSize = 0;
        while(!feof(hFile))
        {
        FileSize = fread(FileBuf,sizeof(char),54,hFile);
//        std::cout << "FileSize равно="  << FileSize << "\r\n";
//         TotalSize += FileSize;
//              std::cout << "TotalSize равно=" << TotalSize << "\r\n";
        }
        // Делаем буфер:
        fseek (hFile,0,SEEK_SET);
//        std::cout << "TotalSize равно=" << TotalSize << "\r\n";
//        std::cout << "FileSize равно=" << FileSize << "\r\n";
//        std::cout << "lSize равно=" << lSize << "\r\n";
//        std::cout << "q равно=" << q << "\r\n";
            for(i=0;i<q;i++)
{        res = fread(FileBuf,sizeof(char),54,hFile);
//        std::cout << "i равно =" << i << "\r\n";
        strcat(SendBuf,base64_encode(reinterpret_cast<const unsigned char*>(FileBuf),54).c_str());
//        strcat(SendBuf,"ПРИВЕТ  ЭТО ДАНЯ!!!!!\r\n");
            strcpy(SendBuf,base64_encode(reinterpret_cast<const unsigned char*>(FileBuf),res).c_str());
        strcat(SendBuf,"\r");
//        puts(SendBuf);

//        std::cout << "RES равно=" << res << "\r\n";
            if(SendBuf)
        {
                puts(SendBuf);
//                FILE * ptrFile = fopen ( "output.txt" , "wb" );
//                fwrite(SendBuf, 1 , sizeof(SendBuf) , ptrFile ); // записать в файл содержимое буфера
//                fclose (ptrFile);
//                fclose(hFile);
            }
}
    return 0;
}



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

Код
./test > test.txt


Но кодирует уже правильно. barb_metal.gif barb_metal.gif barb_metal.gif


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 12 Oct 2016, 20:14 (Сообщение отредактировал t800 - 12 Oct 2016, 20:14)
Сообщение #112

Разработчик
Сообщений: 534
Спасибо сказали: 222 раза




Фух заработало! barb_metal.gif barb_metal.gif barb_metal.gif
И вот что у меня получилось:

Код
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include "base64.h"
#include <cstring>


int main() {

    FILE* hFile = NULL;
    unsigned int q, i,res;
        hFile = fopen("input.txt","rb");

        if(hFile == NULL)
          {
              fputs("Ошибка файла \n", stderr);
              exit(1);
              }

  // определяем размер файла
  fseek(hFile , 0 , SEEK_END);                          // устанавливаем позицию в конец файла
  long lSize = ftell(hFile);                            // получаем размер в байтах
  q = lSize/54+1;
  rewind (hFile);                                       // устанавливаем указатель в конец файла

  char * SendBuf = (char*) malloc(sizeof(char) * lSize);
  char * FileBuf = (char*) malloc(sizeof(char) * lSize); // выделить память для хранения содержимого файла
  if (FileBuf  == NULL)
     {
      fputs("Ошибка памяти", stderr);
      exit(2);
     }
    // Делаем буфер:
    fseek (hFile,0,SEEK_SET);
    FILE * ptrFile = fopen ( "output.txt" , "wb" );
    for(i=0;i<q;i++)
    {    res = fread(FileBuf,sizeof(char),54,hFile);
        strcat(SendBuf,base64_encode(reinterpret_cast<const unsigned char*>(FileBuf),res).c_str());
            strcpy(SendBuf,base64_encode(reinterpret_cast<const unsigned char*>(FileBuf),res).c_str());
        strcat(SendBuf,"\r");
            fputs(SendBuf, ptrFile);
    }
    fclose (ptrFile);
  return 0;
}




--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 13 Oct 2016, 02:05
Сообщение #113

Immortal
Сообщений: 798
Спасибо сказали: 555 раз




Цитата
Фух заработало!

Ну и слава богу!
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 13 Oct 2016, 06:17 (Сообщение отредактировал t800 - 13 Oct 2016, 06:22)
Сообщение #114

Разработчик
Сообщений: 534
Спасибо сказали: 222 раза




Цитата(AlexSpl @ 13 Oct 2016, 05:05) *
Цитата
Фух заработало!

Ну и слава богу!



Да чуть не забыл! Чтобы код работал рядом с ним надо положить еще два файлика: base64.h и base64.cpp
и в них написать код из вот этого примера http://www.adp-gmbh.ch/cpp/common/base64.html
и собирать или камандой

Код
g++ *.cpp -o test


Или сделать вот такой make файл

Код
nano makefile


Написать в него вот такой код (я его взял от другой программы)

Код
# Automatyczny makefile

CC = g++
CFLAGS = -Wall -O2 -DLINUX
ONLYCOMPILE = $(CC) $(CFLAGS) -c -g
OBJFILES :=  $(patsubst %.cpp,%.o,$(wildcard *.cpp))
PROGNAME = test

all: $(PROGNAME)

$(PROGNAME) : $(OBJFILES)
        $(CC) -o $(PROGNAME) $(OBJFILES)

%.o: %.cpp
        ${ONLYCOMPILE} -o $@ $<

clean:
        rm *.o


И собирать камандой

Код
make


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 14 Oct 2016, 18:58
Сообщение #115

Разработчик
Сообщений: 534
Спасибо сказали: 222 раза




Цитата(t800 @ 12 Oct 2016, 23:14) *
Фух заработало! barb_metal.gif barb_metal.gif barb_metal.gif
И вот что у меня получилось:

Код
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include "base64.h"
#include <cstring>


int main() {

    FILE* hFile = NULL;
    unsigned int q, i,res;
        hFile = fopen("input.txt","rb");

        if(hFile == NULL)
          {
              fputs("Ошибка файла \n", stderr);
              exit(1);
              }

  // определяем размер файла
  fseek(hFile , 0 , SEEK_END);                          // устанавливаем позицию в конец файла
  long lSize = ftell(hFile);                            // получаем размер в байтах
  q = lSize/54+1;
  rewind (hFile);                                       // устанавливаем указатель в конец файла

  char * SendBuf = (char*) malloc(sizeof(char) * lSize);
  char * FileBuf = (char*) malloc(sizeof(char) * lSize); // выделить память для хранения содержимого файла
  if (FileBuf  == NULL)
     {
      fputs("Ошибка памяти", stderr);
      exit(2);
     }
    // Делаем буфер:
    fseek (hFile,0,SEEK_SET);
    FILE * ptrFile = fopen ( "output.txt" , "wb" );
    for(i=0;i<q;i++)
    {    res = fread(FileBuf,sizeof(char),54,hFile);
        strcat(SendBuf,base64_encode(reinterpret_cast<const unsigned char*>(FileBuf),res).c_str());
            strcpy(SendBuf,base64_encode(reinterpret_cast<const unsigned char*>(FileBuf),res).c_str());
        strcat(SendBuf,"\r");
            fputs(SendBuf, ptrFile);
    }
    fclose (ptrFile);
  return 0;
}


Я вот думаю! Мне надо три файла по почте послать - autosave.sav, fheroes2.hgs и fheroes2.hgsс и получается что для кадого файла надо будет писать такой же код и он получится очень длинный. Я посмотрел как в других программах сделано, там сделано по другому делается void Send и что-то такое и потом просто в дпругой месте просто пишут это Send и именен файла который надо послать. И подумал может мне тоже так сделать? Только правильно надо этот void Send написать чтобы потому ему файлы можно было указывать?






--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 14 Oct 2016, 19:01
Сообщение #116

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20603 раза




СРОЧНО УЧЕБНИК


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 15 Oct 2016, 16:38 (Сообщение отредактировал t800 - 15 Oct 2016, 16:42)
Сообщение #117

Разработчик
Сообщений: 534
Спасибо сказали: 222 раза




Так ну я вроде сделал

Код
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include "base64.h"
#include <cstring>

int Send(const char *FileName)
{
unsigned int q, i,res;
FILE* hFile = NULL;    
hFile = fopen(FileName,"rb");    

        if(hFile == NULL)
          {
              fputs("Ошибка файла \n", stderr);
              exit(1);
              }

  // определяем размер файла
  fseek(hFile , 0 , SEEK_END);                          // устанавливаем позицию в конец файла
  long lSize = ftell(hFile);                            // получаем размер в байтах
  q = lSize/54+1;
  rewind (hFile);                                       // устанавливаем указатель в конец файла

  char * SendBuf = (char*) malloc(sizeof(char) * lSize);
  char * FileBuf = (char*) malloc(sizeof(char) * lSize); // выделить память для хранения содержимого файла
  char * TitleBuf = (char*) malloc(sizeof(char) * 1024);
  if (FileBuf  == NULL)
     {
      fputs("Ошибка памяти", stderr);
      exit(2);
     }
    // Делаем буфер:
    fseek (hFile,0,SEEK_SET);
    FILE * ptrFile = fopen ( "output.txt" , "ab" );
//Пишем заголовки
    strcat(TitleBuf,"\n");
    strcat(TitleBuf,"Subject: Turnir\n");
    strcat(TitleBuf,"Content-Type: multipart/mixed;\n");
    strcat(TitleBuf,"Content-Disposition: attachment;\n");
    strcat(TitleBuf,"\tfilename=autosave.sav\n");
    strcat(TitleBuf,"Content-Transfer-Encoding: base64\n");
    strcat(TitleBuf,"Content-Type: application/octet-stream;\n");
    strcat(TitleBuf,"\tname=autosave.sav\n\n");
    fputs(TitleBuf, ptrFile);
//Кодируем и пищем файл
    for(i=0;i<q;i++)
    {    
        res = fread(FileBuf,sizeof(char),54,hFile);
        strcat(SendBuf,base64_encode(reinterpret_cast<const unsigned char*>(FileBuf),res).c_str());
        strcpy(SendBuf,base64_encode(reinterpret_cast<const unsigned char*>(FileBuf),res).c_str());
        strcat(SendBuf,"\r\n");
        fputs(SendBuf, ptrFile);
        fflush (ptrFile);
    }
    //fclose (ptrFile);
  return(0);
}

int main() {
Send("autosave.sav");
Send("fheroes2.hgs");
Send("fheroes2.hgsc");
return 0;
}


И оно сейчас вроде работает но есть одна проблема.

Если в конце int Send написать как оно и полагается каманду fclose (ptrFile); то она пишет в конце в файл еще какие-то дурацкие значки. Я погуглил это называется мусор и вроде советуют вставить в код команду fflush
я ее в разные места на пробу повствалял. И оно вроде заработало нормально (мусор перестало писать) но только при условии если команда fclose (ptrFile); выключена (как это в коде сейчас), оно сейчас вроде работает но мне это нравится почему команда fclose (ptrFile); включена все равно пишет мусор.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 15 Oct 2016, 18:22 (Сообщение отредактировал t800 - 15 Oct 2016, 19:38)
Сообщение #118

Разработчик
Сообщений: 534
Спасибо сказали: 222 раза




Фух вроде нашел правильную каманду

Код
memset(Buf, 0, sizeof(Buf));


И в результате получилось вот так

Код
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include "base64.h"

int Send(const char *FileName)
{
unsigned int q, i,res;
FILE* hFile = NULL;    
hFile = fopen(FileName,"rb");    

        if(hFile == NULL)
          {
              fputs("Ошибка файла \n", stderr);
              exit(1);
              }

  // определяем размер файла
  fseek(hFile , 0 , SEEK_END);                          // устанавливаем позицию в конец файла
  long lSize = ftell(hFile);                            // получаем размер в байтах
  q = lSize/54+1;
  rewind (hFile);                                       // устанавливаем указатель в конец файла

  char * SendBuf = (char*) malloc(sizeof(char) * lSize);
  char * FileBuf = (char*) malloc(sizeof(char) * lSize); // выделить память для хранения содержимого файла
  char * TitleBuf = (char*) malloc(sizeof(char) * 1024);
  if (FileBuf  == NULL)
     {
      fputs("Ошибка памяти", stderr);
      exit(2);
     }
    // Делаем буфер:
    fseek (hFile,0,SEEK_SET);
    FILE * ptrFile = fopen ( "output.txt" , "ab" );
//Пишем заголовки
    memset(SendBuf, 0, sizeof(SendBuf)); // чистим буфер от мусора
    memset(TitleBuf, 0, sizeof(TitleBuf)); // чистим буфер от мусора
    strcat(TitleBuf,"Subject: Turnir\n");
    strcat(TitleBuf,"Content-Type: multipart/mixed;\n");
    strcat(TitleBuf,"Content-Disposition: attachment;\n");
    strcat(TitleBuf,"\tfilename=autosave.sav\n");
    strcat(TitleBuf,"Content-Transfer-Encoding: base64\n");
    strcat(TitleBuf,"Content-Type: application/octet-stream;\n");
    strcat(TitleBuf,"\tname=autosave.sav\n\n");
    fputs(TitleBuf, ptrFile);
//Кодируем и пищем файл
    for(i=0;i<q;i++)
    {    
        res = fread(FileBuf,sizeof(char),54,hFile);
        strcat(SendBuf,base64_encode(reinterpret_cast<const unsigned char*>(FileBuf),res).c_str());
        strcpy(SendBuf,base64_encode(reinterpret_cast<const unsigned char*>(FileBuf),res).c_str());
        strcat(SendBuf,"\r\n");
        fputs(SendBuf, ptrFile);
    }
    memset(SendBuf, 0, sizeof(SendBuf));
    strcat(SendBuf,"\r\n");
    fputs(SendBuf, ptrFile);
    fclose (ptrFile);
    fclose (hFile);
  return(0);
}

int main() {
Send("autosave.sav");
Send("fheroes2.hgs");
Send("fheroes2.hgsc");
return 0;
}


А вот и новый урок:



--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 17 Apr 2017, 17:51 (Сообщение отредактировал t800 - 17 Apr 2017, 17:55)
Сообщение #119

Разработчик
Сообщений: 534
Спасибо сказали: 222 раза




Сегодня почитал про классы и про ООП и решил попробовать сделать какой-нибудь урок про классы.
Нашел пример на английском про студентов и сделал из него пример для учеников по русски

Получилось вот так:


Код
/* ucheniki.h */
#include <string>

class Ucheniki {
    public:
        // Установка имени ученика
        void ustanovit_imya(std::string imya_uchenika)
        {
            imya = imya_uchenika;
        }
        // Получение имени ученика
        std::string poluchit_imya()
        {
            return imya;
        }
        // Установка фамилии ученика
        void ustanovit_familiya(std::string familiya_uchenika)
        {
            familiya = familiya_uchenika;
        }
        // Получение фамилии ученика
        std::string poluchit_familiya()
        {
            return familiya;
        }
        // Установка промежуточных оценок
        void ustanovit_ocenki(int ocenki_uchenika[])
        {
            for (int i = 0; i < 5; ++i) {
                ocenki[i] = ocenki_uchenika[i];
            }
        }
        // Установка среднего балла
        void ustanovit_sredniy_bal(float bal)
        {
            sredniy_bal = bal;
        }
        // Получение среднего балла
        float poluchit_sredniy_bal()
        {
            return sredniy_bal;
        }

    private:
        // Промежуточные оценки
        int ocenki[5];
        // Средний балл
        float sredniy_bal;
        // Имя
        std::string imya;
        // Фамилия
        std::string familiya;
};


И файл ucheniki.cpp

Код
/* ucheniki.cpp */
#include <iostream>
#include "ucheniki.h"

int main()
{
    // Создание объекта класса Uchеniki
    Ucheniki uchenik;

    std::string imya;
    std::string familiya;

    // Ввод имени с клавиатуры
    std::cout << "Имя: ";
    getline(std::cin, imya);

    // Ввод фамилии
    std::cout << "Фамилия: ";
    getline(std::cin, familiya);

    // Сохранение имени и фамилии в объект класса Ucheniki
    uchenik.ustanovit_imya(imya);
    uchenik.ustanovit_familiya(familiya);

    // Оценки
    int ocenki[5];
    // Сумма всех оценок
    int summa = 0;

    // Ввод промежуточных оценок
    for (int i = 0; i < 5; ++i) {
        std::cout << "Оценка " << i+1 << ": ";
        std::cin >> ocenki[i];
        // суммирование
        summa += ocenki[i];
    }

    // Сохраняем промежуточные оценки в объект класса Uchenik
    uchenik.ustanovit_ocenki(ocenki);
    // Считаем средний балл
    float sredniy_bal = summa / 5.0;
    // Сохраняем средний балл в объект класса Uchenik
    uchenik.ustanovit_sredniy_bal(sredniy_bal);
    // Выводим данные по ученику
    std::cout << "Средний бал для ученика " << uchenik.poluchit_imya() << " "
         << uchenik.poluchit_familiya() << " равен: "
         << uchenik.poluchit_sredniy_bal() << std::endl;

    return 0;
}


Потром собрал командой

Код
g++ ucheniki.cpp -o ucheniki


И все собралось нормально.

Тогда я решил попробовать, а что будет если имена функция и переменный писать не только по русски но и русскими буквами и написал вместо int summa = 0;

Код
   int сумма = 0;


и вместо summa += ocenki[i];

Код
  сумма += ocenki[i];


и

Код
float sredniy_bal = сумма / 5.0;


и попробовал собрать и получит такие ошибки

Код
danya@danya:~/class$ g++ ucheniki.cpp -o ucheniki
ucheniki.cpp:28:5: ошибка: в программе обнаружен некорректный символ «\321»
ucheniki.cpp:28:5: ошибка: в программе обнаружен некорректный символ «\201»
ucheniki.cpp:28:5: ошибка: в программе обнаружен некорректный символ «\321»
ucheniki.cpp:28:5: ошибка: в программе обнаружен некорректный символ «\203»
ucheniki.cpp:28:5: ошибка: в программе обнаружен некорректный символ «\320»
ucheniki.cpp:28:5: ошибка: в программе обнаружен некорректный символ «\274»
ucheniki.cpp:28:5: ошибка: в программе обнаружен некорректный символ «\320»
ucheniki.cpp:28:5: ошибка: в программе обнаружен некорректный символ «\274»
ucheniki.cpp:28:5: ошибка: в программе обнаружен некорректный символ «\320»
ucheniki.cpp:28:5: ошибка: в программе обнаружен некорректный символ «\260»
ucheniki.cpp:35:9: ошибка: в программе обнаружен некорректный символ «\321»
ucheniki.cpp:35:9: ошибка: в программе обнаружен некорректный символ «\201»
ucheniki.cpp:35:9: ошибка: в программе обнаружен некорректный символ «\321»
ucheniki.cpp:35:9: ошибка: в программе обнаружен некорректный символ «\203»
ucheniki.cpp:35:9: ошибка: в программе обнаружен некорректный символ «\320»
ucheniki.cpp:35:9: ошибка: в программе обнаружен некорректный символ «\274»
ucheniki.cpp:35:9: ошибка: в программе обнаружен некорректный символ «\320»
ucheniki.cpp:35:9: ошибка: в программе обнаружен некорректный символ «\274»
ucheniki.cpp:35:9: ошибка: в программе обнаружен некорректный символ «\320»
ucheniki.cpp:35:9: ошибка: в программе обнаружен некорректный символ «\260»
ucheniki.cpp:41:5: ошибка: в программе обнаружен некорректный символ «\321»
ucheniki.cpp:41:5: ошибка: в программе обнаружен некорректный символ «\201»
ucheniki.cpp:41:5: ошибка: в программе обнаружен некорректный символ «\321»
ucheniki.cpp:41:5: ошибка: в программе обнаружен некорректный символ «\203»
ucheniki.cpp:41:5: ошибка: в программе обнаружен некорректный символ «\320»
ucheniki.cpp:41:5: ошибка: в программе обнаружен некорректный символ «\274»
ucheniki.cpp:41:5: ошибка: в программе обнаружен некорректный символ «\320»
ucheniki.cpp:41:5: ошибка: в программе обнаружен некорректный символ «\274»
ucheniki.cpp:41:5: ошибка: в программе обнаружен некорректный символ «\320»
ucheniki.cpp:41:5: ошибка: в программе обнаружен некорректный символ «\260»
ucheniki.cpp: В функции «int main()»:
ucheniki.cpp:28:20: ошибка: expected unqualified-id before «=» token
ucheniki.cpp:35:20: ошибка: expected primary-expression before «+=» token
ucheniki.cpp:41:36: ошибка: expected primary-expression before «/» token


Почему то русскими буквами писать нельзя no.gif

А как сделать чтобы можно было?

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


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
tolich
сообщение 17 Apr 2017, 19:24
Сообщение #120

😸🧡✊✌️
Сообщений: 16 457
Спасибо сказали: 3339 раз




Цитата(t800 @ 17 Apr 2017, 17:51) *
Почему то русскими буквами писать нельзя?
Не положено. Вначале русскими, потом арабскими, потом еврейскими, и потом без толстого словаря программу не понять. Русскими транслитом тоже, собственно, нежелательно.


--------------------
Я слежу за тобой!
* tolic.narod.ru

Цитата
Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел.
Борис "Бонус" Репетур, "От винта!", выпуск 38.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post

7 страниц V  « < 4 5 6 7 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 17 October 2025 - 23:25
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика