Vysvetleni funkce scanf – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Vysvetleni funkce scanf – C / C++ – Fórum – Programujte.comVysvetleni funkce scanf – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
profeld0
Duch
22. 8. 2013   #1
-
0
-

Zdravím začinám s céčkem a potřeboval bych trochu pomoc vysvetlenim scanf. Čekal bych, že následující program přečte 2 čísla, protože fscanf ignoruje mezery a oddělovače řádků. Nicméně program přečte pouze jedno číslo a druhé ne. Problém lze vzřešit doplněním mezery, nebo new line do fcanf. Chtěl bych pochopit proč to tak funguje. Děkuji moc a šetřete mně.

#include <stdio.h>
int main()
{
  int  a;
  double cislo;
  FILE *fr;

  if((fr = fopen("Cisla.TXT", "r")) == NULL){
    printf("CISLA nejde otevrit");
    return 1;
  }

  a=fscanf(fr, "$%lf", &cislo);
  printf("%d\n", a);
  printf("%lf\n", cislo );
  a=fscanf(fr, "$%lf", &cislo);
  printf("%d\n", a);

  if(fclose(fr) == EOF){
    printf("CISLA nejde zavrit");
    return 1;
  }
  else
    return 0;
}

 Cisla.txt

$3.14
$6.28
$9.42 
Nahlásit jako SPAM
IP: 90.177.133.–
Reklama
Reklama
TheOndrap
~ Anonymní uživatel
305 příspěvků
23. 8. 2013   #2
-
0
-

Ahoj,  normálně to maká tak jak by mělo, ale ty vycházíš z jednoho špatnýho předpokladu. Scanf/fscanf neignoruje konce řádků, tzn. ty když jsi napsal toto: 

a=fscanf(fr, "$%lf", &cislo);
printf("%d\n", a);
printf("%lf\n", cislo );
a=fscanf(fr, "$%lf", &cislo);


tak je to (co se týče toho fscanf) úplně stejný, jako bys napsal toto:  

a=fscanf(fr, "$%lf $%lf", &cislo);


no a z toho už jistě vidíš, že ta tvoje struktura čtení není stejná, jako je struktura toho souboru :) No a ta tvoje poznámka o newLine je teda vodítko jak to vyřešit, musíš jasně říct, že leží jenom jedno číslo na jednom řádku :)

Nahlásit jako SPAM
IP: 88.102.250.–
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, 54 hostů

Podobná vlákna

Scanf - C — založil jakub

Scanf v C - segmentace — založil tap9701

C - scanf zacykleni — založil Remder

Moderátoři diskuze

 

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