title: C Split String and Use It For Struct
body: <p>I need to create a phonebook in C, with structs and linked-list.</p>
  
  <p>Data will be on a file. I'll store data like</p>
  
  <pre><code>Name1#Surname1#Date1#Number1
  Name2#Surname2#Date1#Number2
  Name3#Surname3#Date1#Number3
  </code></pre>
  
  <p>But I couldn't split by delimiter "#" and use datas in my struct. Here is my code:</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;locale.h&gt;
  
  //Veri Yapısı:
  typedef struct kisi
  {
      char isim[50];
      char soyisim[50];
      int dYili;
      char telefon[16];
      struct kisi *sonraki; 
  }Kisi;
  int main()
  {
      //Türkçe çıktılarda sorun yaşamamak için:
      setlocale(LC_ALL,"Turkish");
      //Dosya yolunu sabitle:
      char *dosyaYolu = "rehber.dat";
      //Dosyayı aç:
      FILE *dosya;
      //Okuma modunda
      dosya = fopen(dosyaYolu,"r");
      //Eğer dosya açılmazsa:
      if(dosya == NULL) 
      {
          printf("Dosya açılamadı. Yolu doğru girdiğinizden emin olun.\n===============================\n\n");
          main(); 
      }
      //Dosya açıldı.
      else
      {
          Kisi *liste = (Kisi*)malloc(sizeof(Kisi));
          Kisi *iter = liste;
          //Dosyanın sonuna kadar oku:
          while(!feof(dosya))
          {
               char *veri;
               fscanf(dosya,"%s",veri);
               char *tok = strtok(veri, "#");
               int sayac = 0;
              while(tok != NULL)
              {
               switch(sayac)
               {
                case 0: strcpy(iter-&gt;isim,tok);
                     break;
                case 1: strcpy(iter-&gt;soyisim,tok);
                     break;
                case 2: iter-&gt;dYili = (int)tok;
                     break;
                case 3: strcpy(iter-&gt;telefon,tok);
                     break;
               }
               sayac++;
               tok = strtok(NULL, "#");
              }
              iter-&gt;sonraki = (Kisi*)malloc(sizeof(Kisi));
              iter = iter-&gt;sonraki;
          }//while sonu
         //Dosyayla işimiz bitti. Kapat:
         fclose(dosya);
      }
      system("pause&gt;null");
  }
  </code></pre>
  
  <p>What I need to do is:</p>
  
  <ol>
  <li>Read data from a file</li>
  <li>Use data for struct</li>
  <li>Link structs</li>
  <li>Add a new person, delete a person etc. (I didn't try to do them yet, there's nothing about this in my code)</li>
  </ol>
  
  <p>My problem is, when I run this program, it stops working. When I remove that while loop with switch-case and just printf my token, it works.</p>
  
  <p>Additional information:</p>
  
  <ul>
  <li>I've to use a file to store my data</li>
  <li>I've to use structs and linked lists</li>
  <li>Every person must be in its own struct (1 struct = 1 person, the same struct of course)</li>
  <li>This program cannot contain C++ codes.</li>
  </ul>