2013-11-09 61 views
0

我想将我的大程序拆分为多个文件... 也许只有一个结构, 然后函数读取一个csv文件,并提取单词,并把它们放入一个数组.. 然后其他功能使用bubblesort对数组进行排序, ,最后是我把所有东西放在一起的主函数... 这个东西就是我在main函数的开头声明了必要的变量,当我想要分离函数时,变量我在主函数中声明,并且我用于这些函数不再被发现...我是否必须再次将它们作为参数传递给函数? OR还有其他更好的方法吗?我可以声明外部或静态变量吗?C++如何将代码拆分为多个文件?

其次,我不知道什么时候创建一个.h文件或另一个.cpp文件,如果另一个.cpp文件,它不允许有另一个主要功能,那么我该怎么做?宣布公开课?

这里是我的代码,我要分开:

#include <cstdlib> 
#include <stdio.h> 
#include <stdlib.h> 
#include <iostream> 
#include <string.h> 
//#include "studentStruct.h" 

using namespace std;  


struct Stud{ 
     long matrnr; 
     char vorname[30]; 
     char name[30]; 
     char datum[30]; 
     float note; 
    }; 


void bubbleSort(Stud mystud[], int studentCounter);    


int main(int argc, char **argv) 
{ 

    const int MAX = 30; 
    Stud stud; 
    Stud mystud[30]; // <<-- Array of "Stud" type 
    //memset((void*)mystud,0,sizeof(mystud) * sizeof(Stud)); 
    int wordCounter(0); 
    int i(0); //thats the charCounter or index 
    int studentCounter(0); 
    char wort[MAX]; 



    FILE * pFile; 
    int cnr(0);  

    pFile=fopen("studentendaten.txt","r"); 
    if (pFile==nullptr) 
    { 
     perror ("Fehler beim öffnen der Datei"); 
    } 

    else 
    {  
    while (cnr != EOF) 
    {  
     (cnr=fgetc(pFile)) ;  

     if ((char)cnr == '\n') { 
      mystud[studentCounter] = stud; 
      studentCounter++;      
      continue;   
     } 

     if ((char)cnr == ';') { 


      wort[i] = '\0'; 

      switch (wordCounter % 5) { 

       case 0:    
       stud.matrnr = atol(wort); 
       break; 

       case 1: 
       strcpy(stud.name, wort); 
       break; 

       case 2: 
       strcpy(stud.vorname, wort); 
       break; 

       case 3: 
       strcpy(stud.datum,wort); 
       break; 

       case 4: 
       stud.note = atof(wort); 
       break; 
      }   

      wordCounter++;   
      i = 0; 
      continue; 
     } 

     wort[i] = (char)cnr; 
     i++;     

    } 

    mystud[studentCounter] = stud; 
    fclose (pFile); 
} 


    bubbleSort(mystud , studentCounter); 

    for (int i(0) ; i <= studentCounter; i++) { 
    //cout <<mystud[i].matrnr << " | " << mystud[i].name << " | " << mystud[i].vorname <<" | " 
    //<< mystud[i].datum <<" | " << mystud[i].note << endl; 
    printf("%ld %15s %15s %15s %6.1f\n",mystud[i].matrnr,mystud[i].name,mystud[i].vorname,mystud[i].datum,mystud[i].note); 
    } 

    return 0; 
} 

void bubbleSort(Stud mystud[], int studentCounter) { 
    Stud tmp; 
    for (int i = 0 ; i<= studentCounter; ++i) { 
     for (int j=0; j<= studentCounter-1; ++j) { 
      if (mystud[j].note > mystud[j+1].note) 
      { 
       /** 
       tmp = mystud[j+1]; 
       mystud[j+1] = mystud[j]; 
       mystud[j] = tmp; 
       **/ 

        tmp.matrnr = mystud[j+1].matrnr; 
        strcpy(tmp.vorname,mystud[j+1].vorname); 
        strcpy(tmp.name,mystud[j+1].name); 
        strcpy(tmp.datum , mystud[j+1].datum); 
        tmp.note = mystud[j+1].note; 

        mystud[j+1].matrnr = mystud[j].matrnr; 
        strcpy(mystud[j+1].vorname ,mystud[j].vorname);     
        strcpy(mystud[j+1].name , mystud[j].name); 
        strcpy(mystud[j+1].datum ,mystud[j].datum); 
        mystud[j+1].note = mystud[j].note; 

        mystud[j].matrnr = tmp.matrnr; 
        strcpy(mystud[j].vorname , tmp.vorname); 
        strcpy(mystud[j].name , tmp.name); 
        strcpy(mystud[j].datum , tmp.datum); 
        mystud[j].note = tmp.note; 


       }   
      } 
     }  
    } 

回答

0
  • 一个头文件说 - 我们可以做到这一点。
  • .cpp文件说 - 这是我们如何做 - 即。将其编译为一个对象。

.cpp文件使用头文件知道什么是可用的。

编译.cpp文件。生成目标文件。将它们连接在一起,这将会把松散的目标结合起来。 Bang - 有一个可执行文件。

2

做的最好的(标准)的事情可能会是:

  1. 写一个类梭哈,不是结构(类的私有成员将namevorname等)
  2. 化妆一个头文件,在这里你可以用所有函数的原型编写该类的定义
  3. 在单独的.cpp文件中定义这些函数
  4. 最后,你只需要为实现(main )。

当然,您需要将头文件包含在.cpp文件中。

相关问题