VPN termux about China.net

Webasembly no.3 (scanf) solved

 Efekt =>>>>   wasm.input


Z tym plikiem main.yml wyskoczy błąd 128 oznacza że projekt nie ma uprawnień do zapisu w gałęzi gh-pages trzeba to zmienić klikając 

128

Wejdź w:

Settings → Actions → General

Przewiń do Workflow permissions

Ustaw:

✅ "Read and write permissions

Save 

Teraz skompiluje bez błędu 128 ale żeby wyświetlić stronę potrzeba czegoś jeszcze 

  1. Settings → Pages

  2. Wybierz:

    • Branch: gh-pages

    • Folder: / (root) albo /docs, zależnie od projektu

  3. Kliknij Save

Teraz projekt wie gdzie znajdują się pliki strony.

Żeby wyświetlić stronę 

Wejdź w:

Repozytorium → Settings → Pages

Na górze powinno być coś takiego:

Your site is live at:

https://twoj-uzytkownik.github.io/twoje-repo/

Kliknij ten link – to jest Twój publiczny adres strony.

Więc udało się jest już strona która prosi o dane do aplikacji ale co to pętla nieskończona 

Krótkie przypomnienie, że printf() działa od razu w WebAssembly.


scanf() jednak nie działa bez dodatkowej konfiguracji, bo w przeglądarce nie ma terminala i stdin jest pusty.


➡️ scanf() W WebAssembly powoduje zawieszenie, pętlę lub pusty wynik.


➡️ Dlaczego? Bo scanf() czeka na dane ze standardowego wejścia (stdin), którego w przeglądarce nie ma.


Jak to naprawić? Rozwiązanie: prompt() jako stdin


scanflag++ jako kontrola, żeby nie dublować prompta.


Jak chcemy żeby działał trzeba zmodyfikować plik .js który jest generowany podczas kompilacji o dosłownie dwie linijki ale potrzebne też będzie narzędzie do wyszukiwania słowa w pliku .js zwykła wyszukiwarka wystarczy ten plik jest sporych rozmiarów w odpowiednim miejscu trzeba dodać scanflag++ żeby okno do wejścia "windows.prompta" nie wpadało w wieczna pętlę. 

Edytuj plik .js

Znajdź linijkę:

typeof window.prompt == 'function') {
//Zamień po browser 
              // Browser.
             if(!scanflag) result = window.prompt('Input: '); 
             scanflag++;
//Pomiędzy komentarzem 

Już prawie jeszcze trzeba ustawić zmienna scanflag na pozycję zero 

Znajdź :

read:function(stream, buffer, offset, length, pos /* ignored */) {

//Dodaj po zawiasie

         scanflag=0;

Na githubie ciężko się szuka trzeba najpierw wyszukać (wyszukiwarka w przeglądarce tam gdzie jest nowa karta historia zakładki)a później edytować ta pierwsza linijka jest ważniejsza ta druga tylko definiuje zmienna scanflag i ustawia na zero. Ai jakoś inaczej rozwiązuje ten problem ale całkiem podobnie nie szuka dwóch linijek tylko odrazu ustawia zmienna var scanflag nad windows.prompt ale tego nie próbowałem.

No comments:

Post a Comment