Scanf i dwie zmienne

Scanf i dwie zmienne
Tomasz Artemis
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:4
0

Witam,
Potrzebuje pomocy w rozwiązaniu:
Muszę pobrać od użytkownika jakaś frazę, która zazwyczaj ma wzór X Y
(gdzie X to jakieś słowo, oddzielone spacją od Y, a i Y to zbiór słów także oddzielone spacjami.Przykład: słowogłówne slowo1 slowo2). słowogłówne miało by się znaleźć w zmiennej X, a cała reszta miała by się znaleźć w zmiennej y w niezmienionej formie.
Niestety są przypadki gdzie mamy tylko jedno słowo do wpisania.

Program pisany w C.

Chwilowym rozwiązaniem było

Kopiuj
scanf("%s%s", x,y);

Działa tylko w przypadku, kiedy wpisuje dwa słowa oddzielone spacją. Nie wiem jak uciąć od razu po spacji (ale tylko po pierwszej spacji) i wrzucić to do jednej zmiennej a całą resztę do drugiej.

06
  • Rejestracja:prawie 20 lat
  • Ostatnio:około rok
  • Postów:2440
3
Kopiuj
scanf("%s %[^\n]", x, y);
Tomasz Artemis
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:4
0
0x666 napisał(a):
Kopiuj
scanf("%s %[^\n]", x, y);

Super dzięki, to jest prawie to czego szukałem. Rozwiązuje jeden z dwóch problemów. Teraz został jeszcze przypadek gdy użytkownik wpisuje: słowo1 i klika enter, wymusza żeby wpisać mu coś jeszcze. Da się to jakoś ominąć gdy kliknę enter to nie będzie już żądać ode mnie wpisu?

06
  • Rejestracja:prawie 20 lat
  • Ostatnio:około rok
  • Postów:2440
1

Przeczytaj całą linię do bufora i użyj strtok czy nawet pętli z isspace.

edytowany 1x, ostatnio: _0x666_
Tomasz Artemis
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:4
0

Niestety robiłem już strtok ale, nie przynosi upragnionego rezultatu. Bo dzieli według spacji, cały ciąg , na poszczególne, że tak powiem szuflady, a ja chciałbym mieć tak jak z tym: scanf("%s %[^\n]", x, y); , tylko jeszcze żeby zignorował drugą zmienną jak wcisnę enter :(
Ciężko wyjaśnić o co mi chodzi.

06
  • Rejestracja:prawie 20 lat
  • Ostatnio:około rok
  • Postów:2440
1

No to użyj pętli i znajdź pierwszy biały znak, będziesz miał miejsce podziału na słowo i resztę.

sugar_hiccup
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 2 lata
  • Postów:176
0

strtok

Z tym to ostrożnie, modyfikuje wejściowy string, nie jest thread-safe, nie może być używana z const stringami.


My to na arm napiszemy wszystko i zrobimy co chcemy tyle że 90% kodu to biblioteki z netu albo robota kompilatora Zdajesz sobie sprawę że tak na prawdę wyższy poziom języka może świadczyć jedynie o tym jak niskim poziomem wiedzy może dysponować bałwan,który nazwie się w rezultacie programistą i napisze działający program wciskając zleceniodawcy że tam to akurat musi być 100MHz ARM z 1M pamięci bo tak na prawdę jego pusta łepetyna nie potrafi zrealizować czegoś na innym słabszym mikrokontrolerze
Tomasz Artemis
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:4
0
0x666 napisał(a):

Przeczytaj całą linię do bufora i użyj strtok czy nawet pętli z isspace.

Dzięki wielkie. Znalazłem pierwszą spację puszczając w pętli isspace. Następnie podzieliłem pierwszy ciąg od początku do miejsca spacji, a potem drugi od spacji do końca. I działa, dzięki Wielkie za pomoc.

Można zamknąć.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.