scanf ("% s", str) nie zrobi tego. Zatrzyma czytanie na pierwszym polu. gets (str) nie działa, gdy łańcuch jest duży. Jakieś pomysły?Jak mogę odczytać ciąg znaków zawierający spacje w C?
Odpowiedz
użyj fgets z STDIN jako strumieniem pliku. Następnie możesz określić ilość danych, które chcesz przeczytać i gdzie je umieścić.
Kiedy chcesz przestać czytać? W EOF, w konkretnej postaci, czy co?
Możesz przeczytać określoną liczbę znaków z% c
c dopasowuje sekwencję znaków szerokości count (domyślnie 1); następny wskaźnik musi być wskaźnikiem do znaku, a dla wszystkich znaków musi być wystarczająca ilość miejsca (bez kończącej NUL). Zwykłe pomijanie wiodącej białej przestrzeni jest pomijane. Aby najpierw pominąć białą przestrzeń , użyj jawnego spacji w formacie.
Możesz przeczytać określonych znaków (lub do tych wykluczonych) z% [
[zestawienia sekwencji niepusty z znaków z podanego zestawu akceptowanych znaków; następny wskaźnik musi być wskaźnikiem do char, i musi być wystarczająco dużo miejsca dla wszystkich znaków w ciągu , plus kończący znak NUL. Zwykły skok wiodącej przestrzeni biały jest stłumiony. Łańcuch składa się ze znaków w (lub nie w) określonego zestawu; zestaw jest definiowany przez znaki znaków między nawiasem otwartym [znak i nawias zamykający] charac- ter. Zestaw wyklucza te znaki, jeśli pierwszy znak po otwartym nawiasie jest zwarty ^. Aby umieścić w zestawie zamknięty wspornik , ustaw pierwszy znak po otwartym wsporniku lub ościeżnicy; każda inna pozycja zakończy zestaw. Znak łącznika - jest również specjalny; po umieszczeniu między dwoma innymi dodaje nowe znaki do zestawu. Aby uwzględnić łącznik, nadaj mu ostatni znak przed końcowym nawiasem zamykającym . Na przykład `[^] 0-9-] 'oznacza zbiór " z wyjątkiem nawiasu zamykającego, od zera do dziewięciu i łącznika ". ciąg kończy się wraz z pojawieniem się znaku nie w (lub z warun- cumflex, w) ustawić lub gdy szerokość pola zabraknie
Stwórz własną funkcję, aby przeczytać wiersz. Oto, co można w zasadzie zrobić:
1. fgets into allocated (growable) memory 2. if it was a full line you're done 3. grow the array 4. fgets more characters into the newly allocated memory 5. goto 2.
Implementacja może być nieco trudne :-)
trzeba myśleć o tym, co trzeba przekazać do funkcji (przynajmniej adres tablica i jej rozmiar); i co funkcja zwraca, gdy wszystko "działa" lub kiedy wystąpił błąd.Musisz zdecydować, co jest błędem (jest ciągiem o długości 10 Gb/s bez "\ n" błędu?). Musisz zdecydować, jak rozbudować tablicę.
Edit
Faktycznie może lepiej byłoby fgetc
zamiast fgets
get a character it it EOF? DONE add to array (update length), possible growing it (update size) is it '\n'? DONE repeat
Aby przeczytać ciąg przestrzeni można zrobić w następujący sposób:
char name[30],ch;
i=1;
while((ch=getchar())!='\n')
{
name[i]=ch;
i++;
}
i++;
name[i]='\n';
printf("String is %s",name);
'ch' powinno być' int', aby odróżnić 'EOF' od wszystkich innych' char'. Jak to jest teraz, 'while ((ch = getchar())! = '\ N')' jest nieskończoną pętlą, jeśli 'EOF' ma powrócić z' getchar() '. – chux
char str[100];
Spróbuj tego
scanf("%[^\n]s",str);
czy to
fgets(str, sizeof str, stdin))
1) Nie ma powodu dla 's' w' "% [^ \ n] s" '. 2) 'scanf ("% [^ \ n] ... 'nie skanuje niczego i nie zapisuje niczego w' str' jeśli wejście jest '" \ n "'. 3) 'scanf ("% [^ \ n] .. . "nie chroni przed dużym wejściem. 4)' scanf ("% [^ \ n] ...' pozostawia '' \ n'' w 'stdin'. – chux
- 1. Jak mogę odwrócić ciąg zawierający kombinację znaków w Perlu?
- 2. Elastic Search-Search ciąg znaków zawierający spacje i znaki specjalne w nim przy użyciu C#
- 3. Jak mogę odczytać ciąg znaków XML w OpenCV?
- 4. Jak zamienić ciąg w java zawierający kropkę?
- 5. Jak mogę sprawdzić, czy ciąg znaków zawiera znaki i spacje, a nie tylko białe spacje?
- 6. Jak utworzyć ciąg znaków zawierający filtr na Neo4j Cypher
- 7. Jak odczytać nieograniczoną liczbę znaków w C
- 8. Jak odczytać plik z kodowaniem ANSI zawierający znaki specjalne
- 9. C# Regex - Zaakceptuj spacje w ciągu znaków
- 10. Jak mogę odczytać podpis funkcji zawierający domyślne wartości argumentów?
- 11. Usuwanie spacje z ciągów znaków w Groovy
- 12. Jak odczytać i napisać ciąg STL C++?
- 13. Jak przeanalizować złożony ciąg znaków w C++?
- 14. zawaleniem spacje w ciągu znaków
- 15. Jak odczytać plik json do C++ ciąg
- 16. odczytać ciąg z pliku .resx w C#
- 17. Jak przekonwertować ArrayList na ciąg znaków (ciąg []) w C#
- 18. Jak zadeklarować ciąg znaków w Objective-C?
- 19. Wymień wszystkie spacje w ciągu znaków z +
- 20. W JavaScript/regex, jak usunąć podwójne spacje w ciągu znaków?
- 21. Czy mogę rozpakować ciąg znaków?
- 22. Jak odblokować ciąg znaków Unicode w języku C#
- 23. Jak ukryć element HTML zawierający tylko spacje za pomocą jQuery?
- 24. Jak mogę narysować ciąg znaków bez marginesów w widoku?
- 25. Jak uzyskać ciąg żądania zawierający parametry
- 26. Jak odczytać ciąg połączenia w .NET Core?
- 27. Sortuj ciąg znaków z datami w C#
- 28. odczytać kolumny "SELECT *" na ciąg znaków [] w go
- 29. Podziel ciąg znaków oddzielony wieloma przestrzeniami, ignorując pojedyncze spacje
- 30. Jak odczytać ciąg xml do typu XMLTextReader
'gets' nigdy nie działa. Jest to błąd, który może spowodować, że użyjemy 'gets'. Użyj 'fgets'. –
Może to moja wersja c, która nie zaakceptuje, dostaje się w ogóle ... Dzięki! – Johny
@Johnny: Upomnienie R wobec używania 'gets()' jest spowodowane faktem, że używanie go wprowadza * ogromną * lukę bezpieczeństwa w twoim kodzie, nie że twój konkretny kompilator ma z tym problem (nie powinien; 'dostaje() 'było częścią C od początku). Został wycofany z wersji C99 i nie powinien być już używany. –