[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    outtext(150,150,
    ты же всё время выводишь в одну и ту же позицию o_O
    т.е. тебе еще нужно позицию по Y передвигать
     
  2. Roston

    Roston Elder - Старейшина

    Joined:
    31 Jul 2008
    Messages:
    337
    Likes Received:
    104
    Reputations:
    8
    так оно бы хотя бы выводила букву на букве... а пишет что типо невозможно преобразовать....
     
  3. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    ну есть подозрение что выводить оно должно char*, а ты передаешь char. наверняка ждется строка с нулевым терминатором на конце. вот и сделай функцию char_to_str, которая в массив из двух байт будет сувать букву по 0 индексу и '\0' по первому.
    зы: какие именно параметры хавает outtext яхз, поэтому если не угадал - сори.
     
  4. Roston

    Roston Elder - Старейшина

    Joined:
    31 Jul 2008
    Messages:
    337
    Likes Received:
    104
    Reputations:
    8
    всё разобралсо... надо через буфер
    Code:
    char buf[2];
    for(i=0; i<n; i++)
    {
     buf[0] = present[i];
     buf[1] = 0;
     outtext(150,150,buf);
    }p
    
     
  5. Ant1b10t1k

    Ant1b10t1k New Member

    Joined:
    18 Jun 2009
    Messages:
    8
    Likes Received:
    1
    Reputations:
    5
    Мне нужно брать с файла 3.тхт пока он не будет окончен а с остальных брать по строке, и если дошло до конца брать сначала и так пока файл 3.тхт не будет окончен.

    Code:
    ifstream fin( "1.txt" ); 
    ifstream fim( "2.txt" ); 
    ifstream fib( "3.txt" ); 
    
    string mlstr; 
    string mainstr; 
    string str_name; 
    
    do 
    { 
    getline( fib, str_name ); 
    getline( fin, mainstr ); 
    getline( fim, malstr ); 
    
    somefunction(str_name, mainstr, malstr); 
    } 
    
    while(!fib.eof() &&!fin.eof() &&!fim.eof());
    
     
  6. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    похоже у меня есть зачатки телепатических способностей. нада будет попробовать тазик воды зарядить.
     
    #3186 Ra$cal, 21 Jun 2009
    Last edited: 21 Jun 2009
    2 people like this.
  7. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    Ant1b10t1k

    типа такого

    Code:
    void cycle_input(ifstream& file)
    {
    	if(file.eof())
    		file.seekg(0, ios_base::beg);
    }
    
    void main()
    {
    
    	ifstream fin( "1.txt" ); 
    	ifstream fim( "2.txt" ); 
    	ifstream fib( "3.txt" ); 
    
    	string mlstr; 
    	string mainstr; 
    	string str_name; 
    
    	do 
    	{ 
    		getline( fib, str_name ); 
    
    		getline( fin, mainstr ); 
    		cycle_input(fin);
    
    		getline( fim, malstr ); 
    		cycle_input(fim);
    
    		somefunction(str_name, mainstr, malstr); 
    	} 
    	while(!fib.eof());
    }
     
  8. Ant1b10t1k

    Ant1b10t1k New Member

    Joined:
    18 Jun 2009
    Messages:
    8
    Likes Received:
    1
    Reputations:
    5
    не вышло что то у меня, вот отрвок. кода что сдесь не так. Напомню мне нужно брать с файла потока(fib) пока он не будет окончен а с остальных брать по строке, и если дошло до конца брать сначала и так пока файл поток (fib) не будет окончен.

    Code:
    void cycle_input(ifstream& file)
    {
    	if(file.eof())
    		file.seekg(0, ios_base::beg);
    }
    
    Code:
    do
    {
    cycle_input(fin);
    cycle_input(fim);
    cycle_input(fit);
    cycle_input(fite);
    cycle_input(file);
    
    getline( fib, str_1 );
    getline( fin, mainstr );
    getline( fim, mailstr );
    getline( fit, str_themes);
    getline( fite, str_text );
    getline (file,str_name);
    
    
    size_t pos = mainstr.find( ';' );
    size_t pos2 = mainstr.find( '\0' );
    size_t pos3 = mailstr.find(';');
    size_t pos4 = str_1.find('\0');
    size_t pos5 = str_themes.find('\0');
    size_t pos6 = str_text.find('\0');
    size_t pos7 = str_name.find('\0');
    if ( pos !=string::npos )
      {
    
    string strlog = mainstr.substr( 0, pos);
    string strp1 = mainstr.substr(pos+1,pos2);
    string strm2 = mailstr.substr(0,pos3);
    string m3 = str_base.substr(0,pos4);
    string themes = str_themes.substr(0, pos5);
    string text = str_text.substr(0, pos6);
    string name=str_name.substr(0, pos7);
    
    sendbuffer(strlog,strp1,strm2, m3, themes, text, name);
    
    }
    }
    
    while(!fib.eof());
    
     
  9. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    мда. file.seekg(0, ios_base::beg); работает только при чтении файла, открытого с можификатором binary. чтото как то потоки ввода ацки кривые и я не вижу адекватного способа сбросить указатель чтения на начало файла. попробуй закрыть открыть. или просто юзай другой способ чтения

    через жопу но работает.
    Code:
    void cycle_input(ifstream& file, string& filename)
    {
    	if(!file.eof())
    		return;
    
    	file.close();
    	file.clear();
    
    	file.open(filename.c_str(), ios::in);
    
    }
    
    void main()
    {
    
    	string fin_filename = "1.txt";
    	string fim_filename = "2.txt";
    	string fib_filename = "3.txt";
    
    	ifstream fin(fin_filename.c_str() ); 
    	ifstream fim( fim_filename.c_str() ); 
    	ifstream fib( fib_filename.c_str() ); 
    
    	string mlstr; 
    	string mainstr; 
    	string str_name; 
    
    	do 
    	{ 
    		getline( fib, str_name ); 
    
    		cycle_input(fin, fin_filename);
    		getline( fin, mainstr ); 
    
    		cycle_input(fim, fim_filename);
    		getline( fim, mlstr ); 
    	} 
    	while(!fib.eof());
    
    	system("pause");
    }
     
    #3189 Ra$cal, 22 Jun 2009
    Last edited: 22 Jun 2009
  10. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    Нет, по крайней мере в стандартной библиотеке.
     
  11. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    WinMain(), вопрос был: есть ли такая функция в стандарте языка.
     
  12. Useroff

    Useroff Elder - Старейшина

    Joined:
    23 Aug 2008
    Messages:
    146
    Likes Received:
    27
    Reputations:
    -3
    Короче, проблемма вот в чем.
    Есть цикл for(;;), в нем находится вся программа, так же есть переменная live.
    Если она ровняется 1, то выполняется одно действие, если 2, то другое, если 3, то
    break;

    А если ввести другие знаки, кроме цифр, то получится так, что for(;;) будет работать безконечно.

    Подскажите, как профиксеть ?
     
    #3192 Useroff, 23 Jun 2009
    Last edited: 23 Jun 2009
  13. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Напиши код. Я нифига не понял ^^
    Возможно тебе поможет оператор case и использование default.
    Откуда взялся while, если цикл for. Или цикл просто бесконечный.

    Вообщем насколько я понял так:
    Code:
    while(1) {
        switch( ) {
    
         case 0: 
       
         case 1:
    
         ...
         
         case N:
    
         default:
    
    }}
    Любые действия со стороны юзера ты можешь контролировать. Или же ты можешь ввести обработку исключений.
     
    #3193 Fata1ex, 23 Jun 2009
    Last edited: 23 Jun 2009
  14. Useroff

    Useroff Elder - Старейшина

    Joined:
    23 Aug 2008
    Messages:
    146
    Likes Received:
    27
    Reputations:
    -3
    Ладн, задам вопрос вот так:
    Есть переменная live

    Code:
    for(;;) {
    float live
    
    cin  >> live;
    if (live==1)
    {
    Код...
    }
    if (live==2)
    {
    Код...
    }
    if (live=3)
    {
    cout << "Bye !";
    break;
    }
    }
    
    Как сделать так, чтобы в переменную live, нельзя было записать ничего кроме цифр ?
     
  15. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Ответ я, как ни странно, уже дал.
     
  16. Useroff

    Useroff Elder - Старейшина

    Joined:
    23 Aug 2008
    Messages:
    146
    Likes Received:
    27
    Reputations:
    -3
    Сорри, стормазил я чет, совсем забыл про else.
    Терь написал
    Code:
    else
    break;
     
  17. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Использование такого огромного количества условных операций не есть хорошо. Для таких случаев и придумали оператор множественного выбора. Используй его.
     
  18. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Code:
    exit(1);break;
    оО
    + разве я не то же самое написал парой постов выше? ) Зачем писать одно и тоже?
     
  19. ss88

    ss88 Banned

    Joined:
    27 Nov 2008
    Messages:
    160
    Likes Received:
    44
    Reputations:
    5
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <stdint.h>
    #include <windows.h>
    typedef struct
       {char JMPCODE[3]; 				//JMP на код завантажника
        char OS[8]; 			//назва ОС, під якою форматировалсядиск
        uint16_t bpersect;  				//Байт у секторі
        unsigned char secperclust;  			//Секторів у кластері
        uint16_t  reservsect; 		//У зарезервованих секторів
        unsigned char numFAT;     
    } boot_t;
    
    int main(int argc, char ** argv){
        char * disk_name = "\\\\.\\PhysicalDrive1";
        boot_t boot;
        HANDLE h_disk=CreateFile(disk_name,GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL, OPEN_EXISTING, 0, NULL);
        uint32_t read;
       if(h_disk != INVALID_HANDLE_VALUE)
            printf("the %s successfully opened\n", disk_name);
       printf("%d\n",GetLastError());
       if(ReadFile(h_disk,buf,10,&r,NULL))
            printf("The start of boot block successfully read\n");
       printf("%d\n",GetLastError());
       CloseHandle(h_disk);
       exit(EXIT_SUCCESS);
    }
    
    проблема состоит в том, что устройство оно открывает, а вот считывание не проходит и последней ошибкой является ошибка №87 - неправильный параметр, можете подскажите, что я тут неправильно сделал?
     
  20. ss88

    ss88 Banned

    Joined:
    27 Nov 2008
    Messages:
    160
    Likes Received:
    44
    Reputations:
    5
    До самого дошло, что не так... Пипец, ненавижу иногда свою невнимательность.... ведь секторами-то читать надо, а не байтами )))
     
Thread Status:
Not open for further replies.