problem ze scanf

0

witam, mam taki oto banalny program:

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

int main()
{
   char napis[100];
   while(1)
   {
   scanf("%[ -}]",napis); //pozwala na wprowadzanie napisow zawierajacych znaki od ' '(spacja) do '}'
   fflush(stdin);  //czyszczenie bufora nie pomaga :(
   printf("%s\n",napis);
   }
}

no i teraz tak, po kompilacji w gcc pod linuxem tylko za pierwszym razem mam możliwosc wprowadzenia napisu, a później program całkowicie omija scanf dlaczego i jak to naprawic? dodam iż przy scanf("%s",napis); bład nie występuje a ja musze skozystac z tej funkcji i musze miec mozliwosc wprowadznia wszytskich znakow "drukowalnych" a taka postać funkcji znalazłem gdzies na forach i w specyfikacji tez pisze ze tak trzeba/mozna robic więc kompletnie nie rozumiem co sie dzieje. po wyczyszczeniu napisu (napis[0]='\0') problem nie znika a jedynie napis wyświetla jako pusty ;p
sory za błędy ;p

0
kennyhso napisał(a)

witam, mam taki oto banalny program:

Nie wspominając już, że błędny... "main()", brak zwracanej wartości, komentarze C++.

kennyhso napisał(a)

no i teraz tak, po kompilacji w gcc pod linuxem tylko za pierwszym razem mam możliwosc wprowadzenia napisu, a później program całkowicie omija scanf dlaczego

Nie omija. Z jakiej racji miałby omijać, skoro nie masz żadnej instrukcji warunkowej?

kennyhso napisał(a)

i jak to naprawic?

Obsługiwać poprawnie błędy. Przeczytaj dokumentację scanf(), ze szczególnym uwzględnieniem wartości zwracanej przez tę funkcję.

0

Do tego wypada uważać na fflush:
"If it was open for reading and the last operation was an input operation, the behavior depends on the specific library implementation. In some implementations this causes the input buffer to be cleared, but this is not standard behavior"

0
Kumashiro napisał(a)
kennyhso napisał(a)

witam, mam taki oto banalny program:

Nie wspominając już, że błędny... "main()", brak zwracanej wartości, komentarze C++.

kennyhso napisał(a)

no i teraz tak, po kompilacji w gcc pod linuxem tylko za pierwszym razem mam możliwosc wprowadzenia napisu, a później program całkowicie omija scanf dlaczego

Nie omija. Z jakiej racji miałby omijać, skoro nie masz żadnej instrukcji warunkowej?

kennyhso napisał(a)

i jak to naprawic?

Obsługiwać poprawnie błędy. Przeczytaj dokumentację scanf(), ze szczególnym uwzględnieniem wartości zwracanej przez tę funkcję.

chodziło mi raczej o prostą odpowiedz kogoś kto znał ją ;p
to tylko był prog. demonstarcyjny tego co w wiekszym projekcie nie chodziło w którym błędy obsługiwałem stad te błedy np. w funkci main() ;p a komentarze w stylu c++ to jak dla mnie smieszy błąd :D o ile w ogole moza tu o nim mówić.
ale dobra NIE MA co sie ...
wykryłem błąd a powiem że ciężko było, dam kawałek kodu który był żle napisany:

scanf(" %[ -}]",napis);

nie wiem czy wszyscy widzą tę spację po znaku: " przed znakiem: % normalnie nie wiem co powiedzieć ale teraz chodzi! :D

0

Jeżeli:

  • możesz pisać w c++
  • możesz użyć boost'a
  • interesuje Cie(i jest Ci potrzebne) ciekawsze/lepsze/szybsze/bezpieczniejsze/elastyczniejsze rozwiązanie

Możesz użyć spirit'a. Jest to biblioteka boostowa do pisania parserów.
Niestety trzeba trochę posiedzieć, żeby ogarnąć.

Rozwiązanie Twojego problemu na zachętę:
http://pastebin.com/5d1c1emc

Spirit:
http://boost-spirit.com/home/

1 użytkowników online, w tym zalogowanych: 0, gości: 1