[ 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. geforse

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

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    Что нужно сделать, чтобы выводилось то, что я хочу:

    [​IMG]

    VS express 2010
     
  2. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Думаю, не выйдет ничего, тут уж либо рисование полосочками, либо русский язык. Прочитай про OEM-кодировки.
     
  3. Franki A

    Franki A New Member

    Joined:
    10 Oct 2010
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Не получается откомпилировать

    Смотрю видео по программированию на С++
    В видео пример, пользователь вводит строчку, программа считывает и выводит её ещё раз

    пишу на VS 2010 Express Edition RUS

    http://www.youtube.com/watch?v=4fDMpQ0i6Io

    сам код

    ----------------------------------------------------------------

    #include "stdafx.h"
    #include "iostream"
    #include "conio.h"

    using namespace std;


    int main()
    {


    string x;

    getline( cin, x); //компилятор пишет что идентификатор getline не определен

    cout<<x;//и ещё ругается на <<, пишет что отсутствует оператор

    getch ();

    }
    ---------------------------------------

    что я делаю не правильно? помогите)
     
  4. DesCent

    DesCent Banned

    Joined:
    9 Jul 2010
    Messages:
    276
    Likes Received:
    51
    Reputations:
    16
    В VS вроде надо использовать std::cout std::endl
    И добавить в инклюдах #include <string>

    З.Ы. Dev C++ - полет нормальный.
     
    #5904 DesCent, 5 Dec 2010
    Last edited: 5 Dec 2010
  5. Franki A

    Franki A New Member

    Joined:
    10 Oct 2010
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Спасибо, теперь работает! Учимся дальше)

    Про std они объявлены using namespace std;, можно не писать много раз :p
     
    #5905 Franki A, 5 Dec 2010
    Last edited: 5 Dec 2010
  6. geforse

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

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    Есть двунаправленный список, нужно вставить данные после первого элемента в списке.
    PHP:
    // Функция добавления в список
    void CList::Add(CData pNext)
    {
        
    CData pCurr m_pFirst// Указатель на первый элемент
        
    CData temp;            
                while(
    pCurr->m_pNext != NULL) { // Проходим по всему списку
                    
    if(pCurr->== 1) { // Если номер элемента первый

                     /*  Тут нужно вставить новый элемент pNext */     
            
                    
    }
                                   
    // Перераспределяем список
                    
    temp pCurr;
                    
    temp->m_pPrev temp;            
                    
    pCurr pCurr->m_pNext;
        }
    }
    Не пойму как вставить новый элемент :(
     
  7. Lee_fx

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

    Joined:
    27 Sep 2008
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    CData *tmp = pCurr->m_pNext;
    pCurr->m_pNext = pNext;
    pNext->m_pNext = tmp;
    pNext->m_pPrev = pCurr;
     
    1 person likes this.
  8. Dimon32

    Dimon32 New Member

    Joined:
    6 May 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    Посчитать количество слов hello!

    Посчитать сколько раз в файлу написано слово hello! (не обязательно на разных строках).

    Пробовал этот код:
    Code:
    #include <string> #include <iostream> #include <fstream> #include <iterator> void main() { std::ifstream file; file.open("file.txt", std::ifstream::in); if(!file) { std::cout << "Error opening file" << std::endl; return; } std::string buf; std::copy(std::istreambuf_iterator<char>(file), std::istreambuf_iterator<char>(), std::back_inserter(buf)); file.close(); std::string::size_type pos = 0; unsigned int count = 0; while((pos = buf.find("hello!", pos)) != std::string::npos) { count++; pos++; } std::cout << "\"hello!\" found " << count << " time(s)." << std::endl; }
    Не работает в Dev C++
    Как эту же программу написать в Dev C++?
    Помогите пожалуйста!
     
  9. DesCent

    DesCent Banned

    Joined:
    9 Jul 2010
    Messages:
    276
    Likes Received:
    51
    Reputations:
    16
    Code:
    #include <string> 
    #include <iostream> 
    #include <fstream> 
    #include <iterator> 
    int main() 
    { 
         std::ifstream file; 
         file.open("file.txt", std::ifstream::in); 
         if(!file) 
         { 
                   std::cout << "Error opening file" << std::endl;  
         } 
         std::string buf; 
         std::copy(std::istreambuf_iterator<char>(file), std::istreambuf_iterator<char>(), std::back_inserter(buf));
          file.close(); 
          std::string::size_type pos = 0; 
          unsigned int count = 0; 
          while((pos = buf.find("hello!", pos)) != std::string::npos) { count++; pos++; } 
          std::cout << "\"hello!\" found " << count << " time(s)." << std::endl;
          
           }
    
    
    Держи.
     
  10. Dimon32

    Dimon32 New Member

    Joined:
    6 May 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    Унификация функций

    Написал программку, выполняющие некоторые основные операции с массивами.

    Вот код:
    HTML:
    //--------------------------------------------------------------------------- #include <cstdlib> #include <iostream> #include <stdio.h> #include <conio.h> #include <math.h> #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused main () { int size,i,j,number,min,max; int mas[100]; int cash=0; printf("Please, enter size of array: "); scanf("%d",&size); printf("Size of array= %d\n\n",size); srand(time(0)); for (i=0;i<size;i++) mas[i]=rand()%200-100; printf("Array:\n"); for (i=0;i<size;i++) printf("mas[%d]=%d \n",i,mas[i]); printf("\n\n"); min=mas[0]; for (i=0;i<size;i++) if (mas[i]<min) min=mas[i]; max=mas[0]; for (i=0;i<size;i++) if (mas[i]>max) max=mas[i]; for (i=1; i<=size ; i++) for (j=1; j<=size-i; j++) if (mas[j]>mas[j+1]) { cash=mas[j]; mas[j]=mas[j+1]; mas[j+1]=cash; } printf("Case of number operation:\n"); printf("1. Find min\n 2. Find max\n 3. First nozero element\n"); printf("4. Sorting algoritm Bubble\n\n"); printf("Selected number: "); scanf("%d",&number); printf("\n\n"); switch (number) { case 1: printf("1. 'Find MIN'\n min=%d \n",min); break; case 2: printf("2. 'Find MAX'\n max=%d \n",max); break; case 3: printf("3. 'First nozero element'\n"); for (i=0;i<size;i++) if (mas[i]) printf("First nozero(arr[%d])=%d \n",i,mas[i]); break; case 4: printf("4. 'Sorting algoritm Bubble'\n\n Array was sorted:\n\t"); for (i=0;i<size;i++) printf("mas[%d]=%d \n\t",i,mas[i]); break; default: printf("\n\nNumber operation no selected.\n Press any key for exit!"); getch(); break; } //switch getch(); } //---------------------------------------------------------------------------
    Читал где то, что можно сделать массив из указателей на функции, а не использовать case как здесь.
    Но пример, который там приведен почему то не срабатывает!
    там было что то типа этого:

    PHP:
    Type pf(float*) (int);
    pf func Arr[4];
    func Arr[0]=max;
    func Arr[0]=min;
    ...

    char resp=getch();
    func Arr[resp="1"](x);
    Вообщем, покажите пожалуйста как вместо элемента case использовать массив на указатели функций.
    Хотя бы для 1-й операции с массивами!
     
  11. Mayor16

    Mayor16 Member

    Joined:
    23 Oct 2010
    Messages:
    107
    Likes Received:
    24
    Reputations:
    6
    Всем привет! скажите как мне узнать время выполнения функции? Желательно с нормальной точностью)
     
  12. Karxar

    Karxar New Member

    Joined:
    20 Oct 2010
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    Dimon32 я тебя не очен понил, но вот простой пример ис пользования массива указателей.
    char * mas= (char*)malloc(/*длина массива*/);
    mas[/*элемент массива*/]="что ныт"
     
  13. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    или так если дух велосипедостроения у вас в крови )))
    Code:
    class ReadOnlyMap{
    	HANDLE hFile, hMap;
    	PVOID hBase;
    	DWORD fSize;
    	ReadOnlyMap(const ReadOnlyMap&);
    	ReadOnlyMap& operator=(const ReadOnlyMap&);
    	void init(){
    		hBase = hFile = hMap = NULL;
    		fSize = 0;
    	}
    public:
    	ReadOnlyMap(){init();}
    	~ReadOnlyMap(){
    		if (hBase) UnmapViewOfFile(hBase);
    		if (hMap) CloseHandle(hMap);
    		if (hFile) CloseHandle(hFile);
    	}
    	DWORD size(){return fSize;}
    	bool map(PCTSTR file){
    		hFile = CreateFile(file, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
    		if (INVALID_HANDLE_VALUE != hFile){
    			fSize = GetFileSize(hFile, NULL);
    			if (INVALID_FILE_SIZE != fSize){
    				hMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
    				if (hMap){
    					hBase = MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);
    					if (hBase)
    						return true;
    					CloseHandle(hMap);
    				}
    			}
    			CloseHandle(hFile);
    		}
    		init();
    		return false;
    	}
    	struct basetype{
    		PVOID base;
    		basetype(PVOID p):base(p){}
    		template <class t>
    		operator t(){return (t)base;}
    	};
    	basetype base(){return basetype(this->hBase);}
    	operator bool(){return !!hBase;}
    };
    
    #ifdef __cplusplus
    
    PCTSTR strnstr(PCTSTR s1, PCTSTR s2, size_t n){
    	PCTSTR fw, bw;
    	size_t t;
    	while (n && *s1){
    		fw = s1, bw = s2, t = n;
    		while (t && *fw && *bw && *fw == *bw)
    			fw++, bw++, t--;
    		if (!*bw)
    			return s1;
    		s1++, n--;
    	}
    	return NULL;
    }
    
    PTSTR strnstr(PTSTR s1, PCTSTR s2, size_t n){
    	PCTSTR fw, bw;
    	size_t t;
    	while (n && *s1){
    		fw = s1, bw = s2, t = n;
    		while (t && *fw && *bw && *fw == *bw)
    			fw++, bw++, t--;
    		if (!*bw)
    			return s1;
    		s1++, n--;
    	}
    	return NULL;
    }
    
    #else /* !__cplusplus */
    
    PTSTR strnstr(PCTSTR s1, PCTSTR s2, size_t n){
    	PCTSTR fw, bw;
    	size_t t;
    	while (n && *s1){
    		fw = s1, bw = s2, t = n;
    		while (t && *fw && *bw && *fw == *bw)
    			fw++, bw++, t--;
    		if (!*bw)
    			return (PTSTR)s1;
    		s1++, n--;
    	}
    	return NULL;
    }
    
    #endif
    
    int main(){
    	ReadOnlyMap mm;
    	DWORD c = 0;
    	mm.map("test.txt");
    	if (mm){
    		DWORD cb = mm.size();
    		PCSTR b = mm.base(), e;
    		while (e = strnstr(b, "hello", cb))
    			cb -= ++e - b, b = e, c++;
    	}
    	printf("%lu\n", c);
    }
    
    
    
    
     
    #5913 greki_hoy, 7 Dec 2010
    Last edited: 2 Jan 2011
  14. geforse

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

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    PHP:
    void CList::saveTofile(string fileName) {
        
    int fh _open(fileName,_O_RDWR _O_BINARY);

    }
    Ошибка
    Как передать string в функцию для записи в файл ? :(
     
  15. Lee_fx

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

    Joined:
    27 Sep 2008
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    fileName.c_str()
     
  16. geforse

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

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    Lee_fx, снова выручил, спасибо :)

    Продолжаю вопрос)

    Запись списка в файл
    всё работает, в файл пишется
    PHP:
    void CList::saveTofile(string fileName) {
        
    CData pCurr m_pFirst;
        
    int fh _open(fileName.c_str(),_O_RDWR _O_BINARY);
        if (
    fh == -1)
          
    fh _creat(fileName.c_str(), _S_IREAD _S_IWRITE);
        if (
    fh != -1) {
            
    _lseek(fh,0,SEEK_END);
            while(
    pCurr->m_pNext != NULL){
            
    _write(fh,pCurr,sizeof pCurr);
            
    pCurr pCurr->m_pNext;
            }
            
    cout << "\nСписок сохранён в " << fileName << endl;
        }else{
            
    cout << "\nНе получилось создать файл " << endl;
        }
    }

    PHP:
    void CList::readFromfile(string fileName) {
        
    CData pCurr m_pFirst;
        
    int i 0;
        
    int fh _open(fileName.c_str(),_O_RDWR _O_BINARY);
        if (
    fh != -1){
            do {
            
    _lseek(fh,i,SEEK_END);
             
    _read(fh,&pCurr,sizeof pCurr);
                
    pCurr pCurr->m_pNext// Нарушение прав доступа при чтении "0x00000008".
                
    i++;
            }while(
    pCurr->m_pNext != NULL);
        }else{
            
    cout << "\nУказанного файла не существует!" << endl;
        }
    }
    Нарушение прав доступа при чтении "0x00000008".

    Как прочитать из файла в список ? :(
     
    #5916 geforse, 7 Dec 2010
    Last edited: 7 Dec 2010
  17. Lee_fx

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

    Joined:
    27 Sep 2008
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    Ты в файл пишешь адреса, на которые указывают указатели(pCurr), соответственно когда читаешь, в памяти созданных при сохранении объектов уже нет, вот и ошибка.
    Я так понял ты хотишь весь список в файл загнать а при следующем запуске его восстановить, если да, то перед записью объекты CData нужно как-либо сериализовать, чтобы потом можно было восстановить связи.
     
  18. PAXAn

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

    Joined:
    14 Jun 2008
    Messages:
    43
    Likes Received:
    3
    Reputations:
    0
    помогите плз с проблемой на с++
    создаю windows form application и кидаю туда 2 кнопки, и хочу чтобы при нажатии на 1 она у меня создавала поток и вызывала функцию MyThread , но студия ругаеться и я ничего не могу с ней поделать помогите плз

    вот ошибка

    если в коде написать просто
    HANDLE hThread = CreateThread(NULL, 0, MyThread, NULL, NULL, &ThreadID);
    то ошибка такая

    а на HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MyThread, NULL, NULL, &ThreadID);
    Code:
    Warning	1	warning C4441: calling convention of '__stdcall ' ignored; '__clrcall ' used instead	d:\backup=)\kyrsach\vse ewe lazha\num1\num1\Form1.h	102	num1
    Error	2	error C2440: 'type cast' : cannot convert from 'overloaded-function' to 'LPTHREAD_START_ROUTINE'	d:\backup=)\kyrsach\vse ewe lazha\num1\num1\Form1.h	108	num1
    

    заставил я её компилироваться таким финтом ушами

    Code:
    	public: static DWORD WINAPI MyThread()
    			{  	
    				MessageBox::Show("da da da");
    				return 0;
    			}
    
    	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    				 DWORD ThreadID ;	  
    				 HANDLE hThread = CreateThread(NULL, 0,  (LPTHREAD_START_ROUTINE)MyThread, NULL, NULL, &ThreadID); 
    но осталось
    Code:
    Warning	1	warning C4441: calling convention of '__stdcall ' ignored; '__clrcall ' used instead	d:\backup=)\kyrsach\vse ewe lazha\num1\num1\Form1.h	102	num1
    
    и во время мыволнения при нажатии на кнопку вылетает офибка
    Code:
    инструкци по адресу "0x00361eea" обратилась к памяти по адресу "0x0000000c". Память не может быть read
    что делать? помогите!!!
     
  19. kitysik

    kitysik New Member

    Joined:
    5 Dec 2010
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    #include <stdio.h>
    #include <conio.h>

    int main()
    {
    const int n=3;
    const int m=5;
    double M[n];
    double D[m];
    double srm, srd;
    double sumM, sumD;

    printf("mal'chiki\n");

    for (int i=0;i<n;i++)
    {
    printf("\n%d-i ",i+1);
    scanf("%d", &M);
    }

    for (int i=0;i<n;i++)
    {
    sumM+=M;
    }
    srm=sumM/n;

    printf("devochiki\n");

    for (int i=0;i<m;i++)
    {
    printf("\n%d-ya ", i+1);
    scanf("%d", &D);
    }

    for (int i=0;i<m;i++)
    {
    sumD+=D;
    }
    srd=sumD/m;

    printf("\n%d - srednii rost malchikov", srm);
    printf("\n%d - srednii rost devochek", srd);

    getch();
    return 0;
    }

    08.12.10

    Ростислав:

    пишет что i=0 ошибка,почему?
     
  20. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 kitysik покачену. ни один компилятор не пишет только слово ОШИБКА. Все ще добавляют что за ошибка. Вот не поленись и почитай что за ошибка.
    А вообще если это Си а не С++ то незя так переменные объявлять.
    т.е. int i в начала объяви, а в циклах уже юзай
     
Thread Status:
Not open for further replies.