Problém s programom – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém s programom – C / C++ – Fórum – Programujte.comProblém s programom – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Kent0
Stálý člen
13. 11. 2012   #1
-
0
-

Dobrý večer,

mám textový súbor v ktorom sú vypísané údaje typu "Meno Operator" 

napr:
Martin O
Peter E
Fero O

O - Orange
T - Tmobile

mám napísať program, ktorý rozdelí zadané mená s operátormi do dvoch rôznych súborov. Takže v jednom budú tí, ktorí majú O, a v druhom tí, ktorí majú E.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  char meno[20],oper[1];
  FILE *fr, *fw, *fw1;
  
  fr=fopen("operatori.TXT","r");
  fw=fopen("orange.TXT","w");
  fw1=fopen("tmobile.TXT","w");
  
  while(feof(fr)==0)
  {
   fscanf(fr,"%s",meno);
   fscanf(fr,"%s",oper);
   
   if(oper == 'O')
   {
    fprintf(fw,"%s",meno);
    fprintf(fw,"%s",oper);
   }
   if(oper == 'T')
   {
    fprintf(fw1,"%s",meno);
    fprintf(fw1,"%s",oper);
   }
  }
  
  system("PAUSE");	
  return 0;
}

skúsil som to takto, ale nefunguje mi to. Tak by som poprosil o nejakú užitočnú radu. Ďakujem

Nahlásit jako SPAM
IP: 145.255.157.–
Kent0
Stálý člen
13. 11. 2012   #2
-
0
-

malo tam byť T :) nie E pardon za preklep 

Nahlásit jako SPAM
IP: 145.255.157.–
KIIV
~ Moderátor
+43
God of flame
13. 11. 2012   #3
-
+1
-
Zajímavé

no oper mas jako retezec ale pak srovnavas se znakem 'T' nebo 'O' - to nebude fungovat jak si predstavujes

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
marpit0
Stálý člen
13. 11. 2012   #4
-
0
-

   

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  char meno[20], oper;
  FILE *fr, *fw, *fw1;
  
  fr=fopen("operatori.TXT","r");
  fw=fopen("orange.TXT","w");
  fw1=fopen("tmobile.TXT","w");
  
  while(fscanf(fr,"%s %c",meno, &oper) == 2)
  {   
   if(oper == 'O')
   {
    fprintf(fw,"%s\n",meno);
   }
   else if(oper == 'E')
   {
    fprintf(fw1,"%s\n",meno);
   }
   else continue;
  }
  
  system("PAUSE");	
  return 0;
}
Nahlásit jako SPAM
IP: 78.102.61.–
MarPit
marpit0
Stálý člen
13. 11. 2012   #5
-
0
-

Pár poznámek: ošetři otevírání souborů a na konci soubory nezavíráš.

Nahlásit jako SPAM
IP: 78.102.61.–
MarPit
Kent0
Stálý člen
14. 11. 2012   #6
-
0
-

   

while(fscanf(fr,"%s %c",meno, &oper) == 2)

prečo je v tomto cykle == 2 ? 
 

a potom celý program bude 

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  char meno[20], oper;
  FILE *fr, *fw, *fw1;
  
  fr=fopen("operatori.TXT","r");
  fw=fopen("orange.TXT","w");
  fw1=fopen("tmobile.TXT","w");
  
  while(fscanf(fr,"%s %c",meno, &oper) == 2)
  {   
   if(oper == 'O')
   {
    fprintf(fw,"%s\n",meno);
   }
   else if(oper == 'E')
   {
    fprintf(fw1,"%s\n",meno);
   }
   else continue;
  }
  
  fclose(fw);
  fclose(fr);
  fclose(fw1);
  
  system("PAUSE");	
  return 0;
}

alebo nie?
ale nefunguje mi to :/

Nahlásit jako SPAM
IP: 145.255.157.–
Kent0
Stálý člen
14. 11. 2012   #7
-
0
-

nezapisuje to aj do textového súboru tmobile

Nahlásit jako SPAM
IP: 145.255.157.–
KIIV
~ Moderátor
+43
God of flame
14. 11. 2012   #8
-
0
-

proc je tam == 2 ?  zkusil si se uz podivat na manualovy stranky k  "fscanf" ?

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
marpit0
Stálý člen
14. 11. 2012   #9
-
0
-

fscanf stejně jako scanf vrací počet úspěšně načtených hodnot, ve tvém případě tedy úspěšně načtené jméno a kod operátora. Doporučil bych si k programování něco přečíst, toto jsou úplné základy. Jinak ten kod, co jsem tu vložil je funkční (ověřeno na datech, které jsi dal k dispozici). 

Co se stane, když neexistuje soubor operatori.txt? To ještě ošetři. 

Nahlásit jako SPAM
IP: 78.102.61.–
MarPit
Kent0
Stálý člen
14. 11. 2012   #10
-
0
-

prácu so súbormi sme začali preberať len nedávno takže sa všetko len učím

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  char meno[20], oper;
  FILE *fr, *fw, *fw1;
  
  fr=fopen("operatori.TXT","r");
  fw=fopen("orange.TXT","w");
  fw1=fopen("tmobile.TXT","w");
  
  if ((fr = fopen("operatori.TXT", "r")) == NULL)
  {
        printf("Subor operatori.TXT sa nepodarilo otvorit.\n");
  }
  
  else
  {
      
  
  while(fscanf(fr,"%s %c",meno, &oper) == 2)
  {   
   if(oper == 'O')
   {
    fprintf(fw,"%s\n",meno);
   }
   else if(oper == 'E')
   {
    fprintf(fw1,"%s\n",meno);
   }
   else continue;
  }
}
  
  fclose(fw);
  fclose(fr);
  fclose(fw1);
  
  system("PAUSE");	
  return 0;
}

takto je to aj s ošetrením existencie súboru 

Nahlásit jako SPAM
IP: 145.255.157.–
KIIV
~ Moderátor
+43
God of flame
14. 11. 2012   #11
-
0
-

takto to neni s osetrenim existence souboru.. . takhle se pokousis otevrit stejny soubor vickrat

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kent0
Stálý člen
14. 11. 2012   #12
-
0
-

aha..tak nič ..
a ako sa ošetrí existencia súboru?

Nahlásit jako SPAM
IP: 145.255.157.–
KIIV
~ Moderátor
+43
God of flame
14. 11. 2012   #13
-
0
-

#12 Kent
zkontrolujes co je v tom fr ... napriklad    if ( fr != NULL ) { uspesne otevrene...

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kent0
Stálý člen
14. 11. 2012   #14
-
0
-

   

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  char veta[1024];
  char veta1[1024];
  int c;
  FILE *fw,*fr,*fr1;
  
  fr=fopen("prvy.TXT","r");
  fw=fopen("treti.TXT","w");
  fr1=fopen("druhy.TXT","r");
  
  if(fr =! NULL)
 {
  
  while(feof(fr) == 0)
  {
   fgets(veta,1023,fr);
   fprintf(fw,"%s ",veta);
  }
  
 }
  else  
  printf("Subor sa nepodarilo otvorit\n");
    
  if(fr1 != NULL)
 {
         
  while(feof(fr1) == 0)
  {
  fgets(veta1,1023,fr1);
  fprintf(fw,"%s ",veta1);
  
  }
 }
  else  
  printf("Subor sa nepodarilo otvorit\n");


  fclose(fr);
  fclose(fr1);
  fclose(fw);
  
   
  system("PAUSE");	
  return 0;
}

takto som to pochopil ja..ale keď spustím ten program tak mi hneď zlyhá. Hlási, že program prestal pracovať

Nahlásit jako SPAM
IP: 145.255.157.–
vitamin+8
Grafoman
14. 11. 2012   #15
-
0
-

Toto  

if(fr =! NULL)

pochopi kompilator nasledovne:

if(  fr = (!NULL) )

takze vo fr bude adresa 0x1 :)

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Kent0
Stálý člen
14. 11. 2012   #16
-
0
-

nechápem

tak ako to má byť napísané?

Nahlásit jako SPAM
IP: 145.255.157.–
vitamin+8
Grafoman
14. 11. 2012   #17
-
0
-

#16 Kent
toto je binarny operator 'nerovnasa':

  !=

toto je binarny operator 'rovnasa' a unarna 'negacia'

 =!

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Kent0
Stálý člen
14. 11. 2012   #18
-
0
-

och..také hlúpe chyby robím

ďakujem

Nahlásit jako SPAM
IP: 145.255.157.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 47 hostů

Podobná vlákna

Problém s programom — založil Kent

Problem s programom (C) — založil Cary

Problém z programom — založil Tobinnek

Problém s programom — založil letsthrowq

Problém s programom — založil Kent

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý